# # 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'}}