| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 {% import "encoding_macros.tmpl" as encoding_macros %} | |
| 6 {% import "runtime_type_macros.tmpl" as runtime_type_macros %} | |
| 7 | |
| 8 {% macro define(struct, typepkg, package, exported=True) %} | |
| 9 type {{struct|name(exported)}} struct { | |
| 10 {% for field in struct.fields %} | |
| 11 {{field|name(exported)}} {{field.kind|go_type}} | |
| 12 {% endfor %} | |
| 13 } | |
| 14 | |
| 15 {%- set type_name = struct|name(exported) %} | |
| 16 {{runtime_type_macros.maybeWriteStaticMojomTypeAccessor(typepkg, struct)}} | |
| 17 {{runtime_type_macros.maybeWriteMojomTypeAccessor(typepkg, struct, type_name)}} | |
| 18 | |
| 19 func (s *{{struct|name(exported)}}) Encode(encoder *bindings.Encoder) error { | |
| 20 {% set HEADER_SIZE = 8 %} | |
| 21 encoder.StartStruct({{struct.versions[-1].num_bytes - HEADER_SIZE}}, {{s
truct.versions[-1].version}}) | |
| 22 {% for byte in struct.bytes %} | |
| 23 {% for packed_field in byte.packed_fields %} | |
| 24 {{encoding_macros.encode('s.'~packed_field.field|name(exported), packed_
field.field.kind)|tab_indent()}} | |
| 25 {% endfor %} | |
| 26 {% endfor %} | |
| 27 if err := encoder.Finish(); err != nil { | |
| 28 return err | |
| 29 } | |
| 30 return nil | |
| 31 } | |
| 32 | |
| 33 var {{struct|name(False)}}_Versions []bindings.DataHeader = []bindings.DataHeade
r{ | |
| 34 {% for versionInfo in struct.versions %} | |
| 35 bindings.DataHeader{{'{'}}{{versionInfo.num_bytes}}, {{versionInfo.versi
on}}{{'}'}}, | |
| 36 {% endfor %} | |
| 37 } | |
| 38 | |
| 39 func (s *{{struct|name(exported)}}) Decode(decoder *bindings.Decoder) error { | |
| 40 header, err := decoder.StartStruct() | |
| 41 if err != nil { | |
| 42 return err | |
| 43 } | |
| 44 index := sort.Search(len({{struct|name(False)}}_Versions), func(i int) b
ool { | |
| 45 return {{struct|name(False)}}_Versions[i].ElementsOrVersion >= h
eader.ElementsOrVersion | |
| 46 }) | |
| 47 if index < len({{struct|name(False)}}_Versions) { | |
| 48 if {{struct|name(False)}}_Versions[index].ElementsOrVersion > he
ader.ElementsOrVersion { | |
| 49 index-- | |
| 50 } | |
| 51 expectedSize := {{struct|name(False)}}_Versions[index].Size | |
| 52 if expectedSize != header.Size { | |
| 53 return &bindings.ValidationError{bindings.UnexpectedStru
ctHeader, | |
| 54 fmt.Sprintf("invalid struct header size: should
be %d, but was %d", expectedSize, header.Size), | |
| 55 } | |
| 56 } | |
| 57 } | |
| 58 {% for byte in struct.bytes %} | |
| 59 {% for packed_field in byte.packed_fields %} | |
| 60 if header.ElementsOrVersion >= {{packed_field.min_version}} { | |
| 61 {{encoding_macros.decode('s.'~packed_field.field|name(exported),
packed_field.field.kind)|tab_indent(2)}} | |
| 62 } | |
| 63 {% endfor %} | |
| 64 {% endfor %} | |
| 65 if err := decoder.Finish(); err != nil { | |
| 66 return err | |
| 67 } | |
| 68 return nil | |
| 69 } | |
| 70 | |
| 71 {% endmacro %} | |
| OLD | NEW |