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, module)}}
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_handle_field %}
59 // validate {{struct.name}}.{{field_name}}
60 err = messageValidator.validateHandle({{packed_field|validate_handle_params}})
65 return validator.validationError.NONE;
68 {#--- Encoding and decoding #}
70 {{struct.name}}.encodedSize = codec.kStructHeaderSize + {{struct.packed|payload_size}};
72 {{struct.name}}.decode = function(decoder) {
74 var val = new {{struct.name}}();
75 var numberOfBytes = decoder.readUint32();
76 var numberOfFields = decoder.readUint32();
77 {%- for byte in struct.bytes %}
78 {%- if byte.packed_fields|length > 1 %}
79 packed = decoder.readUint8();
80 {%- for packed_field in byte.packed_fields %}
81 val.{{packed_field.field.name}} = (packed >> {{packed_field.bit}}) & 1 ? true : false;
84 {%- for packed_field in byte.packed_fields %}
85 val.{{packed_field.field.name}} = decoder.{{packed_field.field.kind|decode_snippet}};
88 {%- if byte.is_padding %}
95 {{struct.name}}.encode = function(encoder, val) {
97 encoder.writeUint32({{struct.name}}.encodedSize);
98 encoder.writeUint32({{struct.packed.packed_fields|length}});
100 {%- for byte in struct.bytes %}
101 {%- if byte.packed_fields|length > 1 %}
103 {%- for packed_field in byte.packed_fields %}
104 packed |= (val.{{packed_field.field.name}} & 1) << {{packed_field.bit}}
106 encoder.writeUint8(packed);
108 {%- for packed_field in byte.packed_fields %}
109 encoder.{{packed_field.field.kind|encode_snippet}}val.{{packed_field.field.name}});
112 {%- if byte.is_padding %}