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

Side by Side Diff: mojo/public/tools/bindings/generators/go_templates/struct.tmpl

Issue 948343008: go/bindings: update code to pass structs versions tests (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 10 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 {% macro define(struct, exported=True) %} 5 {% macro define(struct, exported=True) %}
6 type {{struct|name(exported)}} struct { 6 type {{struct|name(exported)}} struct {
7 {% for field in struct.fields %} 7 {% for field in struct.fields %}
8 {{field|name(exported)}} {{field.kind|go_type}} 8 {{field|name(exported)}} {{field.kind|go_type}}
9 {% endfor %} 9 {% endfor %}
10 } 10 }
11 11
12 func (s *{{struct|name(exported)}}) Encode(encoder *bindings.Encoder) error { 12 func (s *{{struct|name(exported)}}) Encode(encoder *bindings.Encoder) error {
13 {% set HEADER_SIZE = 8 %} 13 {% set HEADER_SIZE = 8 %}
14 encoder.StartStruct({{struct.versions[-1].num_bytes - HEADER_SIZE}}, {{s truct.versions[-1].version}}) 14 encoder.StartStruct({{struct.versions[-1].num_bytes - HEADER_SIZE}}, {{s truct.versions[-1].version}})
15 {% for byte in struct.bytes %} 15 {% for byte in struct.bytes %}
16 {% for packed_field in byte.packed_fields %} 16 {% for packed_field in byte.packed_fields %}
17 {{encode('s.'~packed_field.field|name(exported), packed_field.field.kind )|tab_indent()}} 17 {{encode('s.'~packed_field.field|name(exported), packed_field.field.kind )|tab_indent()}}
18 {% endfor %} 18 {% endfor %}
19 {% endfor %} 19 {% endfor %}
20 if err := encoder.Finish(); err != nil { 20 if err := encoder.Finish(); err != nil {
21 return err 21 return err
22 } 22 }
23 return nil 23 return nil
24 } 24 }
25 25
26 var {{struct|name(False)}}_Versions []bindings.DataHeader = []bindings.DataHeade r{
27 {% for versionInfo in struct.versions %}
28 bindings.DataHeader{{'{'}}{{versionInfo.num_bytes}}, {{versionInfo.versi on}}{{'}'}},
29 {% endfor %}
30 }
31
26 func (s *{{struct|name(exported)}}) Decode(decoder *bindings.Decoder) error { 32 func (s *{{struct|name(exported)}}) Decode(decoder *bindings.Decoder) error {
27 {% if struct.bytes %} 33 » header, err := decoder.StartStruct()
28 » version, err := decoder.StartStruct()
29 {% else %}
30 » _, err := decoder.StartStruct()
31 {% endif %}
32 if err != nil { 34 if err != nil {
33 return err 35 return err
34 } 36 }
37 index := sort.Search(len({{struct|name(False)}}_Versions), func(i int) b ool {
38 return {{struct|name(False)}}_Versions[i].ElementsOrVersion >= h eader.ElementsOrVersion
39 })
40 if index < len({{struct|name(False)}}_Versions) {
41 if {{struct|name(False)}}_Versions[index].ElementsOrVersion > he ader.ElementsOrVersion {
42 index--
43 }
44 expectedSize := {{struct|name(False)}}_Versions[index].Size
45 if expectedSize != header.Size {
46 return fmt.Errorf("invalid struct header size: should be %d, but was %d", expectedSize, header.Size)
47 }
48 }
35 {% for byte in struct.bytes %} 49 {% for byte in struct.bytes %}
36 {% for packed_field in byte.packed_fields %} 50 {% for packed_field in byte.packed_fields %}
37 » if version >= {{packed_field.min_version}} { 51 » if header.ElementsOrVersion >= {{packed_field.min_version}} {
38 {{decode('s.'~packed_field.field|name(exported), packed_field.fi eld.kind)|tab_indent(2)}} 52 {{decode('s.'~packed_field.field|name(exported), packed_field.fi eld.kind)|tab_indent(2)}}
39 } 53 }
40 {% endfor %} 54 {% endfor %}
41 {% endfor %} 55 {% endfor %}
42 if err := decoder.Finish(); err != nil { 56 if err := decoder.Finish(); err != nil {
43 return err 57 return err
44 } 58 }
45 return nil 59 return nil
46 } 60 }
47 61
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 } 234 }
221 {{value}} = map{{level}} 235 {{value}} = map{{level}}
222 {% else %} 236 {% else %}
223 value{{level}}, err := decoder.Read{{kind|decode_suffix}}() 237 value{{level}}, err := decoder.Read{{kind|decode_suffix}}()
224 if err != nil { 238 if err != nil {
225 return err 239 return err
226 } 240 }
227 {{value}} = value{{level}} 241 {{value}} = value{{level}}
228 {% endif %} 242 {% endif %}
229 {% endmacro %} 243 {% endmacro %}
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698