diff --git a/libs/dyn/convert/from_typed.go b/libs/dyn/convert/from_typed.go index 75f1c721..bd6b6367 100644 --- a/libs/dyn/convert/from_typed.go +++ b/libs/dyn/convert/from_typed.go @@ -84,11 +84,6 @@ func fromTypedStruct(src reflect.Value, ref dyn.Value) (dyn.Value, error) { } } - // If the struct was equal to its zero value, emit a nil. - if len(out) == 0 { - return dyn.NilValue, nil - } - return dyn.NewValue(out, ref.Location()), nil } diff --git a/libs/dyn/convert/from_typed_test.go b/libs/dyn/convert/from_typed_test.go index d7fa60bb..5fc2b90f 100644 --- a/libs/dyn/convert/from_typed_test.go +++ b/libs/dyn/convert/from_typed_test.go @@ -19,6 +19,25 @@ func TestFromTypedStructZeroFields(t *testing.T) { nv, err := FromTyped(src, ref) require.NoError(t, err) + assert.Equal(t, dyn.V(map[string]dyn.Value{}), nv) +} + +func TestFromTypedStructPointerZeroFields(t *testing.T) { + type Tmp struct { + Foo string `json:"foo"` + Bar string `json:"bar"` + } + + // For an initialized pointer we expect an empty map. + src := &Tmp{} + nv, err := FromTyped(src, dyn.NilValue) + require.NoError(t, err) + assert.Equal(t, dyn.V(map[string]dyn.Value{}), nv) + + // For a nil pointer we expect nil. + src = nil + nv, err = FromTyped(src, dyn.NilValue) + require.NoError(t, err) assert.Equal(t, dyn.NilValue, nv) }