2 function {{struct.name}}(values) {
4 this.initFields_(values);
8 {%- from "enum_definition.tmpl" import enum_def %}
9 {% for enum in struct.enums %}
10 {{enum_def("%s.%s"|format(struct.name, enum.name), enum)}}
14 {% for constant in struct.constants %}
15 {{struct.name}}.{{constant.name}} = {{constant.value|expression_to_text}};
18 {#--- initDefaults() #}
19 {{struct.name}}.prototype.initDefaults_ = function() {
20 {%- for packed_field in struct.packed.packed_fields %}
21 this.{{packed_field.field.name}} = {{packed_field.field|default_value}};
26 {{struct.name}}.prototype.initFields_ = function(fields) {
27 for(var field in fields) {
28 if (this.hasOwnProperty(field))
29 this[field] = fields[field];
35 {{struct.name}}.validate = function(messageValidator, offset) {
37 {% macro check_err() -%}
38 if (err !== validator.validationError.NONE)
41 err = messageValidator.validateStructHeader(offset, {{struct.name}}.encodedSize, {{struct.packed.packed_fields|length}});
44 {%- for packed_field in struct.packed.packed_fields %}
45 {%- set field_name = packed_field.field.name %}
46 {%- if packed_field.field|is_string_pointer_field %}
47 // validate {{struct.name}}.{{field_name}}
48 err = messageValidator.validateStringPointer({{packed_field|validate_string_params}})
50 {%- elif packed_field.field|is_array_pointer_field %}
51 // validate {{struct.name}}.{{field_name}}
52 err = messageValidator.validateArrayPointer({{packed_field|validate_array_params}});
54 {%- elif packed_field.field|is_struct_pointer_field %}
55 // validate {{struct.name}}.{{field_name}}
56 err = messageValidator.validateStructPointer({{packed_field|validate_struct_params}});
58 {%- elif packed_field.field|is_map_pointer_field %}
59 // validate {{struct.name}}.{{field_name}}
60 err = messageValidator.validateMapPointer({{packed_field|validate_map_params}});
62 {%- elif packed_field.field|is_handle_field %}
63 // validate {{struct.name}}.{{field_name}}
64 err = messageValidator.validateHandle({{packed_field|validate_handle_params}})
69 return validator.validationError.NONE;
72 {#--- Encoding and decoding #}
74 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payload_size}};
76 {{struct.name}}.decode = function(decoder) {
78 var val = new {{struct.name}}();
79 var numberOfBytes = decoder.readUint32();
80 var numberOfFields = decoder.readUint32();
81 {%- for byte in struct.bytes %}
82 {%- if byte.packed_fields|length > 1 %}
83 packed = decoder.readUint8();
84 {%- for packed_field in byte.packed_fields %}
85 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? true : false;
88 {%- for packed_field in byte.packed_fields %}
89 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_snippet}};
92 {%- if byte.is_padding %}
99 {{struct.name}}.encode = function(encoder, val) {
101 encoder.writeUint32({{struct.name}}.encodedSize);
102 encoder.writeUint32({{struct.packed.packed_fields|length}});
104 {%- for byte in struct.bytes %}
105 {%- if byte.packed_fields|length > 1 %}
107 {%- for packed_field in byte.packed_fields %}
108 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
110 encoder.writeUint8(packed);
112 {%- for packed_field in byte.packed_fields %}
113 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}});
116 {%- if byte.is_padding %}