})
}
+ defer d.buf.Reset()
switch v.Kind() {
case reflect.String:
v.SetString(d.buf.String())
+ return nil
case reflect.Slice:
if v.Type().Elem().Kind() != reflect.Uint8 {
- panic(&UnmarshalTypeError{
- Value: "string",
- Type: v.Type(),
- })
+ break
}
v.SetBytes(append([]byte(nil), d.buf.Bytes()...))
- default:
- return &UnmarshalTypeError{
- Value: "string",
- Type: v.Type(),
+ return nil
+ case reflect.Array:
+ if v.Type().Elem().Kind() != reflect.Uint8 {
+ break
}
+ reflect.Copy(v, reflect.ValueOf(d.buf.Bytes()))
+ return nil
+ }
+ // I believe we return here to support "ignore_unmarshal_type_error".
+ return &UnmarshalTypeError{
+ Value: "string",
+ Type: v.Type(),
}
-
- d.buf.Reset()
- return nil
}
// Info for parsing a dict value.
require.EqualValues(t, ErrUnusedTrailingBytes{1}, Unmarshal([]byte("i42ee"), &i))
assert.EqualValues(t, 42, i)
}
+
+func TestUnmarshalByteArray(t *testing.T) {
+ var ba [2]byte
+ assert.NoError(t, Unmarshal([]byte("2:hi"), &ba))
+ assert.EqualValues(t, "hi", ba[:])
+}