OLD | NEW |
| (Empty) |
1 {#--- Begin #} | |
2 {%- import "encoding_macros.tmpl" as encoding_macros %} | |
3 {%- macro struct_def(struct, typepkg, package) %} | |
4 {#--- Enums #} | |
5 {%- from "enum_definition.tmpl" import enum_def %} | |
6 {%- for enum in struct.enums %} | |
7 {{enum_def(enum, typepkg, package)}} | |
8 {%- endfor %} | |
9 | |
10 class {{struct|name}} extends bindings.Struct { | |
11 static const List<bindings.StructDataHeader> kVersions = const [ | |
12 {%- for version in struct.versions %} | |
13 const bindings.StructDataHeader({{version.num_bytes}}, {{version.version}}){
% if not loop.last %},{% endif %} | |
14 {%- endfor %} | |
15 ]; | |
16 | |
17 {#--- Constants #} | |
18 {%- for constant in struct.constants %} | |
19 static const {{constant.kind|dart_type}} {{constant|name}} = {{constant.resolv
ed_value}}; | |
20 {%- endfor %} | |
21 | |
22 {#--- initDefaults() #} | |
23 {%- for packed_field in struct.packed.packed_fields %} | |
24 {{packed_field.field.kind|dart_type}} {{packed_field.field|name}} = {{packed_f
ield.field|default_value}}; | |
25 {%- endfor %} | |
26 | |
27 {{struct|name}}() : super(kVersions.last.size); | |
28 | |
29 {{struct|name}}.init( | |
30 {%- for packed_field in struct.packed.packed_fields %} | |
31 {{packed_field.field.kind|dart_type}} this.{{packed_field.field|name}}{% if
not loop.last %}, {% endif %} | |
32 {%- endfor %} | |
33 ) : super(kVersions.last.size); | |
34 | |
35 static {{struct|name}} deserialize(bindings.Message message) => | |
36 bindings.Struct.deserialize(decode, message); | |
37 | |
38 static {{struct|name}} decode(bindings.Decoder decoder0) { | |
39 if (decoder0 == null) { | |
40 return null; | |
41 } | |
42 {{struct|name}} result = new {{struct|name}}(); | |
43 | |
44 {%- if struct.bytes %} | |
45 var mainDataHeader = bindings.Struct.checkVersion(decoder0, kVersions); | |
46 {%- else %} | |
47 bindings.Struct.checkVersion(decoder0, kVersions); | |
48 {%- endif %} | |
49 {%- for byte in struct.bytes %} | |
50 {%- for packed_field in byte.packed_fields %} | |
51 if (mainDataHeader.version >= {{packed_field.min_version}}) { | |
52 {{encoding_macros.decode('result.' ~ packed_field.field|name, packed_field
.field.kind, 8+packed_field.offset, packed_field.bit)|indent(6)}} | |
53 } | |
54 {%- endfor %} | |
55 {%- endfor %} | |
56 return result; | |
57 } | |
58 | |
59 void encode(bindings.Encoder encoder) { | |
60 {%- if not struct.bytes %} | |
61 encoder.getStructEncoderAtOffset(kVersions.last); | |
62 {%- else %} | |
63 var encoder0 = encoder.getStructEncoderAtOffset(kVersions.last); | |
64 {%- endif %} | |
65 const String structName = "{{struct|name}}"; | |
66 String fieldName; | |
67 try { | |
68 {%- for byte in struct.bytes %} | |
69 {%- for packed_field in byte.packed_fields %} | |
70 fieldName = "{{packed_field.field|name}}"; | |
71 {{encoding_macros.encode(packed_field.field|name, packed_field.field.kind,
8+packed_field.offset, packed_field.bit)|indent(6)}} | |
72 {%- endfor %} | |
73 {%- endfor %} | |
74 } on bindings.MojoCodecError catch(e) { | |
75 bindings.Struct.fixErrorMessage(e, fieldName, structName); | |
76 rethrow; | |
77 } | |
78 } | |
79 | |
80 String toString() { | |
81 return "{{struct|name}}(" | |
82 {%- for packed_field in struct.packed.packed_fields %} | |
83 "{{packed_field.field|name}}: ${{packed_field.field|name}}" {% if not
loop.last %}", "{% endif %} | |
84 {%- endfor %}")"; | |
85 } | |
86 | |
87 Map toJson() { | |
88 {%- if struct|is_cloneable_kind %} | |
89 Map map = new Map(); | |
90 {%- for packed_field in struct.packed.packed_fields %} | |
91 map["{{packed_field.field|name}}"] = {{packed_field.field|name}}; | |
92 {%- endfor %} | |
93 return map; | |
94 {%- else %} | |
95 throw new bindings.MojoCodecError( | |
96 'Object containing handles cannot be encoded to JSON.'); | |
97 {%- endif %} | |
98 } | |
99 } | |
100 | |
101 {%- endmacro %} | |
OLD | NEW |