syntax = "proto3"; {% if proto_namespace is defined and proto_namespace is not none %} package {{ proto_namespace }}.messages; {%- else %} package messages; {%- endif %} import "google/protobuf/timestamp.proto"; message Header { string deviceSerialNum = 1; google.protobuf.Timestamp timestamp = 2; uint32 msgId = 3; uint32 sequence = 4; } {%- for (msg_id, msg) in msg_proto.data.items() %} // {{ msg['msg_id'] }} ({{ msg['msg_id_hex_string'] }}) {%- if msg['payload'] | length %} {%- set fields = namespace(payloadList = []) %} {%- for field in msg['payload'] %} {%- set fields.payloadList = fields.payloadList + [ field['type'] ~ "-" ~ field['name'] ] %} {%- endfor %} {%- else %} {%- set fields = namespace(payloadList = [""]) %} {%- endif %} // payload: {{ fields.payloadList | join(", ") }} message {{ msg['msg_name'] }} { Header header = 1; {%- set fields = namespace(id = 2) %} {%- for field in msg['payload'] %} {%- if field['type'] == 'BOOL' %} bool {{ field['name'] }} = {{ fields.id }}; {%- set fields.id = fields.id + 1 %} {%- elif field['type'] == 'U08' or field['type'] == 'U16' or field['type'] == 'U32' %} uint32 {{ field['name'] }} = {{ fields.id }}; {%- set fields.id = fields.id + 1 %} {%- elif field['type'] == 'S16' or field['type'] == 'S32' %} int32 {{field['name']}} = {{fields.id}}; {%- set fields.id = fields.id + 1 %} {%- elif field['type'] == 'F32' %} float {{field['name']}} = {{fields.id}}; {%- set fields.id = fields.id + 1 %} {%- elif field['type'] == 'union' %} oneof {{field['name']}} { bool {{field['name']}}_bool = {{fields.id}}; {%- set fields.id = fields.id + 1 %} uint32 {{field['name']}}_uint32 = {{fields.id}}; {%- set fields.id = fields.id + 1 %} int32 {{field['name']}}_int32 = {{fields.id}}; {%- set fields.id = fields.id + 1 %} float {{field['name']}}_float = {{fields.id}}; {%- set fields.id = fields.id + 1 %} } {%- else %} // {{field['type']}} {{field['name']}} {%- endif %} {%- endfor %} } {%- endfor %}