Index: mojom/generators/go/templates/decoding.go |
diff --git a/mojom/generators/go/templates/decoding.go b/mojom/generators/go/templates/decoding.go |
index ff9361a4ca740b5294e89af81e8d1d47c331267a..87d856e8ba4423c419c24d4cb0f5e6a8eddbeb11 100644 |
--- a/mojom/generators/go/templates/decoding.go |
+++ b/mojom/generators/go/templates/decoding.go |
@@ -17,9 +17,11 @@ if err != nil { |
return err |
} |
if pointer == 0 { |
-{{- if $info.IsNullable }} |
+{{- if $info.IsNullable}} |
{{$info.Identifier}} = nil |
-{{- else }} |
+{{- else if $info.IsUnion}} |
+ return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null union pointer"} |
+{{- else}} |
return &bindings.ValidationError{bindings.UnexpectedNullPointer, "unexpected null pointer"} |
{{- end }} |
} else { |
@@ -63,6 +65,25 @@ if handle.IsValid() { |
if err := {{$info.Identifier}}.Decode(decoder); err != nil { |
return err |
} |
+{{- else if $info.IsUnion -}} |
+{{- if $info.IsPointer -}} |
+if err := decoder.StartNestedUnion(); err != nil { |
+ return err |
+} |
+{{end -}} |
+var err error |
+{{$info.Identifier}}, err = Decode{{$info.GoType}}(decoder) |
+if err != nil { |
+ return err |
+} |
+{{- if not $info.IsNullable}} |
+if {{$info.Identifier}} == nil { |
+ return &bindings.ValidationError{bindings.UnexpectedNullUnion, "unexpected null union"} |
+} |
+{{- end -}} |
+{{- if $info.IsPointer}} |
+decoder.Finish() |
+{{- end -}} |
{{- else if $info.IsArray -}} |
{{ $elInfo := $info.ElementEncodingInfo -}} |
len0, err := decoder.StartArray({{$elInfo.BitSize}}) |