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 ampersandIfNullable = ` | |
12 {{- define "AmpersandIfNullable" -}} | |
vardhan
2016/06/22 15:17:15
haha
| |
13 {{- $info := . -}} | |
14 {{- if $info.IsNullable -}} | |
15 & | |
16 {{- end -}} | |
17 {{- end -}} | |
18 ` | |
19 | |
11 const fieldDecodingTmplText = ` | 20 const fieldDecodingTmplText = ` |
12 {{- define "FieldDecodingTmpl" -}} | 21 {{- define "FieldDecodingTmpl" -}} |
13 {{- $info := . -}} | 22 {{- $info := . -}} |
14 {{- if $info.IsPointer -}} | 23 {{- if $info.IsPointer -}} |
15 pointer, err := decoder.ReadPointer() | 24 pointer, err := decoder.ReadPointer() |
16 if err != nil { | 25 if err != nil { |
17 return err | 26 return err |
18 } | 27 } |
19 if pointer == 0 { | 28 if pointer == 0 { |
20 {{- if $info.IsNullable}} | 29 {{- if $info.IsNullable}} |
21 {{$info.Identifier}} = nil | 30 {{$info.Identifier}} = nil |
22 {{- else if $info.IsUnion}} | 31 {{- else if $info.IsUnion}} |
23 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe cted null union pointer"} | 32 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe cted null union pointer"} |
24 {{- else}} | 33 {{- else}} |
25 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe cted null pointer"} | 34 return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpe cted null pointer"} |
26 {{- end }} | 35 {{- end }} |
27 } else { | 36 } else { |
28 {{ template "NonNullableFieldDecodingTmpl" $info }} | 37 {{ template "NonNullableFieldDecodingTmpl" $info }} |
29 } | 38 } |
30 {{- else -}} | 39 {{- else -}} |
31 {{ template "NonNullableFieldDecodingTmpl" $info }} | 40 {{ template "NonNullableFieldDecodingTmpl" $info }} |
32 {{- end -}} | 41 {{- end -}} |
33 {{- end -}} | 42 {{- end -}} |
34 ` | 43 ` |
35 | 44 |
36 const nonNullableFieldDecodingTmplText = ` | 45 const nonNullableFieldDecodingTmplText = ` |
37 {{- define "NonNullableFieldDecodingTmpl" -}} | 46 {{- define "NonNullableFieldDecodingTmpl" -}} |
38 {{- $info := . -}} | 47 {{- $info := . -}} |
vardhan
2016/06/22 15:17:15
sorry for not mentioning earlier, but it might hel
| |
39 {{- if or $info.IsEnum $info.IsSimple -}} | 48 {{- if or $info.IsEnum $info.IsSimple -}} |
40 value, err := decoder.{{$info.ReadFunction}}() | 49 value, err := decoder.{{$info.ReadFunction}}() |
41 if err != nil { | 50 if err != nil { |
42 return err | 51 return err |
43 } | 52 } |
44 {{if $info.IsSimple -}} | 53 {{if $info.IsSimple -}} |
45 {{$info.Identifier}} = value | 54 {{$info.Identifier}} = value |
46 {{- else -}} | 55 {{- else -}} |
47 {{$info.Identifier}} = {{$info.GoType}}(value) | 56 {{$info.Identifier}} = {{$info.GoType}}(value) |
48 {{- end -}} | 57 {{- end -}} |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
81 return err | 90 return err |
82 } | 91 } |
83 {{- if not $info.IsNullable}} | 92 {{- if not $info.IsNullable}} |
84 if {{$info.Identifier}} == nil { | 93 if {{$info.Identifier}} == nil { |
85 return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpect ed null union"} | 94 return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpect ed null union"} |
86 } | 95 } |
87 {{- end -}} | 96 {{- end -}} |
88 {{- if $info.IsPointer}} | 97 {{- if $info.IsPointer}} |
89 decoder.Finish() | 98 decoder.Finish() |
90 {{- end -}} | 99 {{- end -}} |
100 {{- else if $info.IsInterface -}} | |
101 handle, err := decoder.{{$info.ReadFunction}}() | |
102 if err != nil { | |
103 return err | |
104 } | |
105 if handle.IsValid() { | |
106 handleOwner := bindings.NewMessagePipeHandleOwner(handle) | |
107 {{- if $info.IsInterfaceRequest}} | |
108 {{$info.Identifier}} = {{template "AmpersandIfNullable" $info}}{{$info.G oType}}_Request{handleOwner} | |
109 {{- else}} | |
110 {{$info.Identifier}} = {{template "AmpersandIfNullable" $info}}{{$info.G oType}}_Pointer{handleOwner} | |
111 {{- end -}} | |
112 } else { | |
113 {{- if $info.IsNullable}} | |
114 {{$info.Identifier}} = nil | |
115 {{- else}} | |
116 return &bindings.ValidationError{bindings.UnexpectedInvalidHandle, "unex pected invalid handle"} | |
117 {{- end -}} | |
118 } | |
91 {{- else if $info.IsArray -}} | 119 {{- else if $info.IsArray -}} |
92 {{ $elInfo := $info.ElementEncodingInfo -}} | 120 {{ $elInfo := $info.ElementEncodingInfo -}} |
93 len0, err := decoder.StartArray({{$elInfo.BitSize}}) | 121 len0, err := decoder.StartArray({{$elInfo.BitSize}}) |
94 if err != nil { | 122 if err != nil { |
95 return err | 123 return err |
96 } | 124 } |
97 {{$info.Identifier}} = make({{$info.GoType}}, len0) | 125 {{$info.Identifier}} = make({{$info.GoType}}, len0) |
98 for i := uint32(0); i < len0; i++ { | 126 for i := uint32(0); i < len0; i++ { |
99 {{ template "FieldDecodingTmpl" $elInfo }} | 127 {{ template "FieldDecodingTmpl" $elInfo }} |
100 {{$info.Identifier}}[i] = {{$elInfo.Identifier}} | 128 {{$info.Identifier}}[i] = {{$elInfo.Identifier}} |
(...skipping 29 matching lines...) Expand all Loading... | |
130 for i := 0; i < len({{$keyInfo.Identifier}}); i++ { | 158 for i := 0; i < len({{$keyInfo.Identifier}}); i++ { |
131 (*{{$info.Identifier}})[{{$keyInfo.Identifier}}[i]] = {{$valueInfo.Ident ifier}}[i] | 159 (*{{$info.Identifier}})[{{$keyInfo.Identifier}}[i]] = {{$valueInfo.Ident ifier}}[i] |
132 } | 160 } |
133 {{- end -}} | 161 {{- end -}} |
134 {{- end -}} | 162 {{- end -}} |
135 ` | 163 ` |
136 | 164 |
137 func initDecodingTemplates() { | 165 func initDecodingTemplates() { |
138 template.Must(goFileTmpl.Parse(nonNullableFieldDecodingTmplText)) | 166 template.Must(goFileTmpl.Parse(nonNullableFieldDecodingTmplText)) |
139 template.Must(goFileTmpl.Parse(fieldDecodingTmplText)) | 167 template.Must(goFileTmpl.Parse(fieldDecodingTmplText)) |
168 template.Must(goFileTmpl.Parse(ampersandIfNullable)) | |
140 } | 169 } |
OLD | NEW |