From a1ca14f6f0930327a732e73d1273dfb1e52d9399 Mon Sep 17 00:00:00 2001 From: Rangel Reale Date: Sat, 8 Jul 2023 09:01:29 -0300 Subject: [PATCH] use reflect.Value directly --- decode_input.go | 2 +- decode_struct.go | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/decode_input.go b/decode_input.go index 91320fe..685dc4d 100644 --- a/decode_input.go +++ b/decode_input.go @@ -40,7 +40,7 @@ func (d *Decoder[IT, DC]) decodeInputFromStructInfo(input IT, si *structInfo, da } } - err := d.decodeStruct(si, input, data, decodeOptions) + err := d.decodeStruct(si, input, reflect.ValueOf(data), decodeOptions) if err != nil { return err } diff --git a/decode_struct.go b/decode_struct.go index 90aa890..a7c3a71 100644 --- a/decode_struct.go +++ b/decode_struct.go @@ -8,8 +8,8 @@ import ( ) // decodeStruct uses the structInfo to decode the input to the struct. -func (d *Decoder[IT, DC]) decodeStruct(si *structInfo, input IT, data interface{}, decodeOptions DecodeOptions[IT, DC]) error { - dataValue := reflectValueElem(reflect.ValueOf(data)) +func (d *Decoder[IT, DC]) decodeStruct(si *structInfo, input IT, dataValue reflect.Value, decodeOptions DecodeOptions[IT, DC]) error { + dataValue = reflectValueElem(dataValue) if err := si.checkSameType(dataValue.Type()); err != nil { return err } @@ -32,7 +32,7 @@ func (d *Decoder[IT, DC]) decodeStruct(si *structInfo, input IT, data interface{ case OperationRecurse: // recurse into inner struct reflectEnsurePointerValue(&fieldValue) - if err := d.decodeStruct(sifield, input, fieldValue.Addr().Interface(), decodeOptions); err != nil { + if err := d.decodeStruct(sifield, input, fieldValue, decodeOptions); err != nil { return err } dataWasSet = true