Fix behavior of json modifier to match what json.Unmarshal does for nil values

In the original implementation I thought that the `json` package
would set fields to its zero value during unmarshal if the input
JSON had a `null` value for that attribute.

After performing an small experiment I noticed this is not the case.

Thus, I have removed that behavior and now if the json contains
a `null` value for a field this field will be ignored by the
json modifier thus keeping its original value whatever it was.
pull/29/head
Vinícius Garcia 2022-10-18 10:41:47 -03:00
parent e48f82c255
commit 136ee66fe9
2 changed files with 5 additions and 8 deletions

View File

@ -4,7 +4,6 @@ import (
"context"
"encoding/json"
"fmt"
"reflect"
)
// This modifier serializes objects as JSON when
@ -13,10 +12,6 @@ import (
var jsonModifier = AttrModifier{
Scan: func(ctx context.Context, opInfo OpInfo, attrPtr interface{}, dbValue interface{}) error {
if dbValue == nil {
v := reflect.ValueOf(attrPtr)
// Set the struct to its 0 value just like json.Unmarshal
// does for nil attributes:
v.Elem().Set(reflect.Zero(reflect.TypeOf(attrPtr).Elem()))
return nil
}

View File

@ -21,9 +21,11 @@ func TestAttrScan(t *testing.T) {
expectErrToContain []string
}{
{
desc: "should set struct to zero value if input is nil",
dbInput: nil,
expectedValue: FakeAttr{},
desc: "should not set struct to zero value if input is nil",
dbInput: nil,
expectedValue: FakeAttr{
Foo: "notZeroValue",
},
},
{
desc: "should work when input is a byte slice",