Skip to content

Commit 8d7a072

Browse files
checking nil or zero data
1 parent 90dd1d9 commit 8d7a072

File tree

8 files changed

+34
-76
lines changed

8 files changed

+34
-76
lines changed

field/binary.go

+5-23
Original file line numberDiff line numberDiff line change
@@ -145,49 +145,31 @@ func (f *Binary) Unmarshal(v interface{}) error {
145145
}
146146

147147
func (f *Binary) Marshal(v interface{}) error {
148+
if v == nil || reflect.ValueOf(v).IsZero() {
149+
f.value = nil
150+
return nil
151+
}
152+
148153
switch v := v.(type) {
149154
case *Binary:
150-
if v == nil {
151-
return nil
152-
}
153155
f.value = v.value
154156
case string:
155-
if v == "" {
156-
f.value = nil
157-
return nil
158-
}
159-
160157
buf, err := hex.DecodeString(v)
161158
if err != nil {
162159
return fmt.Errorf("failed to convert string to byte: %w", err)
163160
}
164161

165162
f.value = buf
166163
case *string:
167-
if v == nil {
168-
f.value = nil
169-
return nil
170-
}
171-
172164
buf, err := hex.DecodeString(*v)
173165
if err != nil {
174166
return fmt.Errorf("failed to convert string to byte: %w", err)
175167
}
176168

177169
f.value = buf
178170
case []byte:
179-
if v == nil || len(v) == 0 {
180-
f.value = nil
181-
return nil
182-
}
183-
184171
f.SetBytes(v)
185172
case *[]byte:
186-
if v == nil {
187-
f.value = nil
188-
return nil
189-
}
190-
191173
f.SetBytes(*v)
192174
default:
193175
return fmt.Errorf("data does not match required *Binary or (string, *string, []byte, *[]byte) type")

field/binary_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,9 @@ func TestBinaryFieldMarshal(t *testing.T) {
208208
require.Equal(t, testValue, str.Value())
209209

210210
err = str.Marshal(nil)
211+
require.NoError(t, err)
212+
213+
err = str.Marshal(123456)
211214
require.Error(t, err)
212215
require.Equal(t, "data does not match required *Binary or (string, *string, []byte, *[]byte) type", err.Error())
213216
}

field/hex.go

+5-22
Original file line numberDiff line numberDiff line change
@@ -158,38 +158,21 @@ func (f *Hex) Unmarshal(v interface{}) error {
158158
}
159159

160160
func (f *Hex) Marshal(v interface{}) error {
161+
if v == nil || reflect.ValueOf(v).IsZero() {
162+
f.value = ""
163+
return nil
164+
}
165+
161166
switch v := v.(type) {
162167
case *Hex:
163-
if v == nil {
164-
return nil
165-
}
166168
f.value = v.value
167169
case string:
168-
if v == "" {
169-
f.value = ""
170-
return nil
171-
}
172-
173170
f.value = v
174171
case *string:
175-
if v == nil {
176-
f.value = ""
177-
return nil
178-
}
179-
180172
f.value = *v
181173
case []byte:
182-
if v == nil || len(v) == 0 {
183-
f.value = ""
184-
return nil
185-
}
186-
187174
f.SetBytes(v)
188175
case *[]byte:
189-
if v == nil {
190-
f.value = ""
191-
return nil
192-
}
193176
f.SetBytes(*v)
194177
default:
195178
return fmt.Errorf("data does not match required *Hex or (string, *string, []byte, *[]byte) type")

field/hex_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,9 @@ func TestHexFieldMarshal(t *testing.T) {
220220
require.Equal(t, testValue, buf)
221221

222222
err = str.Marshal(nil)
223+
require.NoError(t, err)
224+
225+
err = str.Marshal(123456)
223226
require.Error(t, err)
224227
require.Equal(t, "data does not match required *Hex or (string, *string, []byte, *[]byte) type", err.Error())
225228
}

field/numeric.go

+7-19
Original file line numberDiff line numberDiff line change
@@ -159,38 +159,26 @@ func (f *Numeric) Unmarshal(v interface{}) error {
159159
return nil
160160
}
161161

162-
func (f *Numeric) Marshal(data interface{}) error {
163-
switch v := data.(type) {
162+
func (f *Numeric) Marshal(v interface{}) error {
163+
if v == nil || reflect.ValueOf(v).IsZero() {
164+
f.value = 0
165+
return nil
166+
}
167+
168+
switch v := v.(type) {
164169
case *Numeric:
165-
if v == nil {
166-
f.value = 0
167-
return nil
168-
}
169170
f.value = v.value
170171
case int:
171172
f.value = v
172173
case *int:
173-
if v == nil {
174-
f.value = 0
175-
return nil
176-
}
177174
f.value = *v
178175
case string:
179-
if v == "" {
180-
f.value = 0
181-
return nil
182-
}
183176
val, err := strconv.Atoi(v)
184177
if err != nil {
185178
return utils.NewSafeError(err, "failed to convert sting value into number")
186179
}
187180
f.value = val
188181
case *string:
189-
if v == nil {
190-
f.value = 0
191-
return nil
192-
}
193-
194182
val, err := strconv.Atoi(*v)
195183
if err != nil {
196184
return utils.NewSafeError(err, "failed to convert sting value into number")

field/numeric_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ func TestNumericFieldMarshal(t *testing.T) {
155155
require.Equal(t, 123456, vNumeric.Value())
156156

157157
err := str.Marshal(nil)
158+
require.NoError(t, err)
159+
160+
err = str.Marshal([]byte("123456"))
158161
require.Error(t, err)
159162
require.Equal(t, "data does not match require *Numeric or (int, *int, string, *string) type", err.Error())
160163
}

field/string.go

+5-12
Original file line numberDiff line numberDiff line change
@@ -153,24 +153,17 @@ func (f *String) Unmarshal(v interface{}) error {
153153
}
154154

155155
func (f *String) Marshal(v interface{}) error {
156+
if v == nil || reflect.ValueOf(v).IsZero() {
157+
f.value = ""
158+
return nil
159+
}
160+
156161
switch v := v.(type) {
157162
case *String:
158-
if v == nil {
159-
f.value = ""
160-
return nil
161-
}
162163
f.value = v.value
163164
case string:
164-
if v == "" {
165-
f.value = ""
166-
return nil
167-
}
168165
f.value = v
169166
case *string:
170-
if v == nil {
171-
f.value = ""
172-
return nil
173-
}
174167
f.value = *v
175168
case int:
176169
f.value = strconv.FormatInt(int64(v), 10)

field/string_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,9 @@ func TestStringFieldMarshal(t *testing.T) {
156156
require.Equal(t, "123456", str.Value())
157157

158158
err := str.Marshal(nil)
159+
require.NoError(t, err)
160+
161+
err = str.Marshal([]byte("123456"))
159162
require.Error(t, err)
160163
require.Equal(t, "data does not match required *String or (string, *string, int, *int) type", err.Error())
161164
}

0 commit comments

Comments
 (0)