diff --git a/internal/test/components/components.gen.go b/internal/test/components/components.gen.go index a49865cbf..5a25a7a87 100644 --- a/internal/test/components/components.gen.go +++ b/internal/test/components/components.gen.go @@ -880,9 +880,11 @@ func (t OneOfObject10) MarshalJSON() ([]byte, error) { return nil, err } object := make(map[string]json.RawMessage) - err = json.Unmarshal(b, &object) - if err != nil { - return nil, err + if t.union != nil { + err = json.Unmarshal(b, &object) + if err != nil { + return nil, err + } } object["one"], err = json.Marshal(t.One) @@ -1176,9 +1178,11 @@ func (t OneOfObject4) MarshalJSON() ([]byte, error) { return nil, err } object := make(map[string]json.RawMessage) - err = json.Unmarshal(b, &object) - if err != nil { - return nil, err + if t.union != nil { + err = json.Unmarshal(b, &object) + if err != nil { + return nil, err + } } object["fixedProperty"], err = json.Marshal(t.FixedProperty) @@ -1375,9 +1379,11 @@ func (t OneOfObject8) MarshalJSON() ([]byte, error) { return nil, err } object := make(map[string]json.RawMessage) - err = json.Unmarshal(b, &object) - if err != nil { - return nil, err + if t.union != nil { + err = json.Unmarshal(b, &object) + if err != nil { + return nil, err + } } object["fixed"], err = json.Marshal(t.Fixed) @@ -1466,9 +1472,11 @@ func (t OneOfObject9) MarshalJSON() ([]byte, error) { return nil, err } object := make(map[string]json.RawMessage) - err = json.Unmarshal(b, &object) - if err != nil { - return nil, err + if t.union != nil { + err = json.Unmarshal(b, &object) + if err != nil { + return nil, err + } } object["type"], err = json.Marshal(t.Type) diff --git a/internal/test/components/components_test.go b/internal/test/components/components_test.go index b4f893332..bcb34d752 100644 --- a/internal/test/components/components_test.go +++ b/internal/test/components/components_test.go @@ -202,3 +202,13 @@ func TestAnyOf(t *testing.T) { assert.NoError(t, err) assert.Equal(t, OneOfVariant5{Discriminator: "all", Id: 456}, v5) } + +func TestMarshalWhenNoUnionValueSet(t *testing.T) { + const expected = `{"one":null,"three":null,"two":null}` + + var dst OneOfObject10 + + bytes, err := dst.MarshalJSON() + assert.Nil(t, err) + assert.Equal(t, expected, string(bytes)) +} diff --git a/pkg/codegen/templates/union.tmpl b/pkg/codegen/templates/union.tmpl index a29e2d0b7..ac7657dad 100644 --- a/pkg/codegen/templates/union.tmpl +++ b/pkg/codegen/templates/union.tmpl @@ -65,9 +65,11 @@ return nil, err } object := make(map[string]json.RawMessage) - err = json.Unmarshal(b, &object) - if err != nil { + if t.union != nil { + err = json.Unmarshal(b, &object) + if err != nil { return nil, err + } } {{range .Schema.Properties}} object["{{.JsonFieldName}}"], err = json.Marshal(t.{{.GoFieldName}})