Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Side by Side Diff: mojo/public/tools/bindings/generators/dart_templates/union_definition.tmpl

Issue 2250183003: Make the fuchsia mojo/public repo the source of truth. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 {#--- Begin #}
2
3 {%- import "encoding_macros.tmpl" as encoding_macros %}
4 {%- macro enum_def(union) %}
5 enum {{union|name}}Tag {
6 {%- for field in union.fields %}
7 {{field|name}},
8 {%- endfor %}
9 unknown
10 }
11 {%- endmacro %}
12
13 {%- macro wrapper_def(union) %}
14 class {{union|name}} extends bindings.Union {
15 static final _tagToInt = const {
16 {%- for field in union.fields %}
17 {{union|name}}Tag.{{field|name}}: {{field.ordinal}},
18 {%- endfor %}
19 };
20
21 static final _intToTag = const {
22 {%- for field in union.fields %}
23 {{field.ordinal}}: {{union|name}}Tag.{{field|name}},
24 {%- endfor %}
25 };
26
27 var _data;
28 {{union|name}}Tag _tag = {{union|name}}Tag.unknown;
29
30 {{union|name}}Tag get tag => _tag;
31
32 {%- for field in union.fields %}
33 {{field.kind|dart_type}} get {{field|name}} {
34 if (_tag != {{union|name}}Tag.{{field|name}}) {
35 throw new bindings.UnsetUnionTagError(_tag, {{union|name}}Tag.{{field|name }});
36 }
37 return _data;
38 }
39
40 set {{field|name}}({{field.kind|dart_type}} value) {
41 _tag = {{union|name}}Tag.{{field|name}};
42 _data = value;
43 }
44 {%- endfor %}
45
46 static {{union|name}} decode(bindings.Decoder decoder0, int offset) {
47 int size = decoder0.decodeUint32(offset);
48 if (size == 0) {
49 return null;
50 }
51 {{union|name}} result = new {{union|name}}();
52
53 {# Unknown union members not handled. #}
54 {{union|name}}Tag tag = _intToTag[decoder0.decodeUint32(offset + 4)];
55 switch (tag) {
56 {%- for field in union.fields %}
57 case {{union|name}}Tag.{{field|name}}:
58 {%- if field.kind|is_union_kind %}
59 var decoder1 = decoder0.decodePointer(offset + 8, {{field.kind|is_nullab le_kind|dart_true_false}});
60 result.{{field|name}} = {{field.kind|dart_type}}.decode(decoder1, 0);
61 {%- else %}
62 {{encoding_macros.decode('result.' ~ field|name, field.kind, "offset + 8 ", 0)|indent(8)}}
63 {%- endif %}
64 break;
65 {%- endfor %}
66 default:
67 throw new bindings.MojoCodecError("Bad union tag: $tag");
68 }
69
70 return result;
71 }
72
73 void encode(bindings.Encoder encoder0, int offset) {
74 {# TODO(azani): Error when trying to encode an unknown member. #}
75 encoder0.encodeUint32(16, offset);
76 encoder0.encodeUint32(_tagToInt[_tag], offset + 4);
77 switch (_tag) {
78 {%- for field in union.fields %}
79 case {{union|name}}Tag.{{field|name}}:
80 {%- if field.kind|is_union_kind %}
81 encoder0.encodeNestedUnion({{field|name}}, offset + 8, {{field.kind|is_n ullable_kind|dart_true_false}});
82 {%- else %}
83 {{encoding_macros.encode(field|name, field.kind, "offset + 8", 0)|indent (8)}}
84 {%- endif %}
85 break;
86 {%- endfor %}
87 default:
88 throw new bindings.MojoCodecError("Bad union tag: $_tag");
89 }
90 }
91
92 String toString() {
93 String result = "{{union|name}}(";
94 switch (_tag) {
95 {%- for field in union.fields %}
96 case {{union|name}}Tag.{{field|name}}:
97 result += "{{field|name}}";
98 break;
99 {%- endfor %}
100 default:
101 result += "unknown";
102 }
103 result += ": $_data)";
104 return result;
105 }
106 }
107 {%- endmacro %}
108
109
110 {%- macro union_def(union, typepkg, package) %}
111 {{enum_def(union)}}
112 {{wrapper_def(union)}}
113
114 {%- endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698