mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-23 01:21:40 +00:00
111 lines
4.5 KiB
Django/Jinja
111 lines
4.5 KiB
Django/Jinja
#
|
|
# MIT License
|
|
#
|
|
# Copyright (c) PhotonVision
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
#
|
|
|
|
###############################################################################
|
|
## THIS FILE WAS AUTO-GENERATED BY ./photon-serde/generate_messages.py.
|
|
## --> DO NOT MODIFY <--
|
|
###############################################################################
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
from ..packet import Packet
|
|
from ..targeting import * # noqa
|
|
|
|
if TYPE_CHECKING:
|
|
{%- set ns = namespace(types=[]) -%}
|
|
{%- for field in fields|unique(attribute="type")-%}
|
|
{%- set _ = ns.types.append(field.type) -%}
|
|
{%- endfor -%}
|
|
{% set _ = ns.types.append(name) -%}
|
|
{%- for type in ns.types|sort%}
|
|
{%- if not type | is_shimmed and not type | is_intrinsic %}
|
|
from ..targeting import {{ type }} # noqa
|
|
{%- endif %}
|
|
{%- endfor%}
|
|
|
|
|
|
class {{ name }}Serde:
|
|
# Message definition md5sum. See photon_packet.adoc for details
|
|
MESSAGE_VERSION = "{{ message_hash }}"
|
|
MESSAGE_FORMAT = "{{ message_fmt }}"
|
|
|
|
@staticmethod
|
|
def pack(value: "{{ name }}") -> "Packet":
|
|
ret = Packet()
|
|
{% for field in fields -%}
|
|
{%- if field.type | is_shimmed %}
|
|
ret.{{ get_message_by_name(field.type).python_encode_shim}}(value.{{ field.name }})
|
|
{%- elif field.optional == True %}
|
|
# {{ field.name }} is optional! it better not be a VLA too
|
|
ret.encodeOptional(value.{{ field.name }}, {{ field.type }}.photonStruct)
|
|
{%- elif field.vla == True and not field.type | is_intrinsic %}
|
|
# {{ field.name }} is a custom VLA!
|
|
ret.encodeList(value.{{ field.name }}, {{ field.type }}.photonStruct)
|
|
{%- elif field.vla == True and field.type | is_intrinsic %}
|
|
# {{ field.name }} is a custom VLA!
|
|
ret.encode{{ type_map[field.type].java_type.title() }}List(value.{{ field.name }})
|
|
{%- elif field.type | is_intrinsic %}
|
|
# {{ field.name }} is of intrinsic type {{ field.type }}
|
|
ret.{{ type_map[field.type].python_encode_shim }}(value.{{field.name}})
|
|
{%- else %}
|
|
# {{ field.name }} is of non-intrinsic type {{ field.type }}
|
|
ret.encodeBytes({{ field.type }}.photonStruct.pack(value.{{field.name}}).getData())
|
|
{%- endif %}
|
|
{%- if not loop.last %}
|
|
{% endif -%}
|
|
{% endfor%}
|
|
return ret
|
|
|
|
@staticmethod
|
|
def unpack(packet: "Packet") -> "{{ name }}":
|
|
ret = {{ name }}()
|
|
{% for field in fields -%}
|
|
{%- if field.type | is_shimmed %}
|
|
ret.{{ field.name }} = packet.{{ get_message_by_name(field.type).python_decode_shim }}()
|
|
{%- elif field.optional == True %}
|
|
# {{ field.name }} is optional! it better not be a VLA too
|
|
ret.{{ field.name }} = packet.decodeOptional({{ field.type }}.photonStruct)
|
|
{%- elif field.vla == True and not field.type | is_intrinsic %}
|
|
# {{ field.name }} is a custom VLA!
|
|
ret.{{ field.name }} = packet.decodeList({{ field.type }}.photonStruct)
|
|
{%- elif field.vla == True and field.type | is_intrinsic %}
|
|
# {{ field.name }} is a custom VLA!
|
|
ret.{{ field.name }} = packet.decode{{ type_map[field.type].java_type.title() }}List()
|
|
{%- elif field.type | is_intrinsic %}
|
|
# {{ field.name }} is of intrinsic type {{ field.type }}
|
|
ret.{{field.name}} = packet.{{ type_map[field.type].python_decode_shim }}()
|
|
{%- else %}
|
|
# {{ field.name }} is of non-intrinsic type {{ field.type }}
|
|
ret.{{field.name}} = {{ field.type }}.photonStruct.unpack(packet)
|
|
{%- endif %}
|
|
{%- if not loop.last %}
|
|
{% endif -%}
|
|
{% endfor%}
|
|
|
|
return ret
|
|
|
|
|
|
# Hack ourselves into the base class
|
|
{{ name }}.photonStruct = {{ name }}Serde(){{'\n'}}
|