OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 package templates | 5 package templates |
6 | 6 |
7 import ( | 7 import ( |
8 "text/template" | 8 "text/template" |
9 ) | 9 ) |
10 | 10 |
11 const fieldDecodingTmplText = ` | 11 const fieldDecodingTmplText = ` |
12 {{- define "FieldDecodingTmpl" -}} | 12 {{- define "FieldDecodingTmpl" -}} |
13 {{- $info := . -}} | 13 {{- $info := . -}} |
14 {{- if $info.IsPointer -}} | 14 {{- if $info.IsPointer -}} |
15 pointer, err := decoder.ReadPointer() | 15 pointer, err := decoder.ReadPointer() |
16 if err != nil { | 16 if err != nil { |
17 return err | 17 return err |
18 } | 18 } |
19 if pointer == 0 { | 19 if pointer == 0 { |
20 {{- if $info.IsNullable }} | 20 {{- if $info.IsNullable}} |
21 {{$info.Identifier}} = nil | 21 {{$info.Identifier}} = nil |
22 {{- else }} | 22 {{- else if $info.IsUnion}} |
| 23 » return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe
cted null union pointer"} |
| 24 {{- else}} |
23 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe
cted null pointer"} | 25 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe
cted null pointer"} |
24 {{- end }} | 26 {{- end }} |
25 } else { | 27 } else { |
26 {{ template "NonNullableFieldDecodingTmpl" $info }} | 28 {{ template "NonNullableFieldDecodingTmpl" $info }} |
27 } | 29 } |
28 {{- else -}} | 30 {{- else -}} |
29 {{ template "NonNullableFieldDecodingTmpl" $info }} | 31 {{ template "NonNullableFieldDecodingTmpl" $info }} |
30 {{- end -}} | 32 {{- end -}} |
31 {{- end -}} | 33 {{- end -}} |
32 ` | 34 ` |
(...skipping 23 matching lines...) Expand all Loading... |
56 return &bindings.ValidationError{bindings.UnexpectedInvalidHandle, "unex
pected invalid handle"} | 58 return &bindings.ValidationError{bindings.UnexpectedInvalidHandle, "unex
pected invalid handle"} |
57 {{- end -}} | 59 {{- end -}} |
58 } | 60 } |
59 {{- else if $info.IsStruct -}} | 61 {{- else if $info.IsStruct -}} |
60 {{- if $info.IsNullable -}} | 62 {{- if $info.IsNullable -}} |
61 {{$info.Identifier}} = new({{$info.GoType}}) | 63 {{$info.Identifier}} = new({{$info.GoType}}) |
62 {{end -}} | 64 {{end -}} |
63 if err := {{$info.Identifier}}.Decode(decoder); err != nil { | 65 if err := {{$info.Identifier}}.Decode(decoder); err != nil { |
64 return err | 66 return err |
65 } | 67 } |
| 68 {{- else if $info.IsUnion -}} |
| 69 {{- if $info.IsPointer -}} |
| 70 if err := decoder.StartNestedUnion(); err != nil { |
| 71 return err |
| 72 } |
| 73 {{end -}} |
| 74 var err error |
| 75 {{$info.Identifier}}, err = Decode{{$info.GoType}}(decoder) |
| 76 if err != nil { |
| 77 return err |
| 78 } |
| 79 {{- if not $info.IsNullable}} |
| 80 if {{$info.Identifier}} == nil { |
| 81 return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpect
ed null union"} |
| 82 } |
| 83 {{- end -}} |
| 84 {{- if $info.IsPointer}} |
| 85 decoder.Finish() |
| 86 {{- end -}} |
66 {{- else if $info.IsArray -}} | 87 {{- else if $info.IsArray -}} |
67 {{ $elInfo := $info.ElementEncodingInfo -}} | 88 {{ $elInfo := $info.ElementEncodingInfo -}} |
68 len0, err := decoder.StartArray({{$elInfo.BitSize}}) | 89 len0, err := decoder.StartArray({{$elInfo.BitSize}}) |
69 if err != nil { | 90 if err != nil { |
70 return err | 91 return err |
71 } | 92 } |
72 {{$info.Identifier}} = make({{$info.GoType}}, len0) | 93 {{$info.Identifier}} = make({{$info.GoType}}, len0) |
73 for i := uint32(0); i < len0; i++ { | 94 for i := uint32(0); i < len0; i++ { |
74 {{ template "FieldDecodingTmpl" $elInfo }} | 95 {{ template "FieldDecodingTmpl" $elInfo }} |
75 {{$info.Identifier}}[i] = {{$elInfo.Identifier}} | 96 {{$info.Identifier}}[i] = {{$elInfo.Identifier}} |
(...skipping 30 matching lines...) Expand all Loading... |
106 (*{{$info.Identifier}})[{{$keyInfo.Identifier}}[i]] = {{$valueInfo.Ident
ifier}}[i] | 127 (*{{$info.Identifier}})[{{$keyInfo.Identifier}}[i]] = {{$valueInfo.Ident
ifier}}[i] |
107 } | 128 } |
108 {{- end -}} | 129 {{- end -}} |
109 {{- end -}} | 130 {{- end -}} |
110 ` | 131 ` |
111 | 132 |
112 func initDecodingTemplates() { | 133 func initDecodingTemplates() { |
113 template.Must(goFileTmpl.Parse(nonNullableFieldDecodingTmplText)) | 134 template.Must(goFileTmpl.Parse(nonNullableFieldDecodingTmplText)) |
114 template.Must(goFileTmpl.Parse(fieldDecodingTmplText)) | 135 template.Must(goFileTmpl.Parse(fieldDecodingTmplText)) |
115 } | 136 } |
OLD | NEW |