Skip to content

Commit cd944aa

Browse files
authored
Fix API bug introduced in v2.0.0 (#138)
Instead of adding (Un)MarshalerWithMode interfaces, the existing interfaces (Un)Marshaler was replaced by adding an extra parameter. Fix this by restoring (Un)Marshaler to the original API. See issue #137 for details.
1 parent 15ccced commit cd944aa

4 files changed

Lines changed: 15 additions & 15 deletions

File tree

decode.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ func Unmarshal(data []byte, v interface{}) error {
102102
// of a CBOR value. UnmarshalCBOR must copy the CBOR data if it wishes to retain
103103
// the data after returning.
104104
type Unmarshaler interface {
105-
UnmarshalCBOR(DecMode, []byte) error
105+
UnmarshalCBOR([]byte) error
106106
}
107107

108108
// InvalidUnmarshalError describes an invalid argument passed to Unmarshal.
@@ -369,7 +369,7 @@ func (d *decodeState) parseToUnmarshaler(v reflect.Value) error {
369369
if u, ok := v.Interface().(Unmarshaler); ok {
370370
start := d.off
371371
d.skip()
372-
return u.UnmarshalCBOR(d.dm, d.data[start:d.off])
372+
return u.UnmarshalCBOR(d.data[start:d.off])
373373
}
374374
d.skip()
375375
return errors.New("cbor: failed to assert " + v.Type().String() + " as cbor.Unmarshaler")

decode_test.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1861,14 +1861,14 @@ func TestBinaryMarshalerError(t *testing.T) {
18611861

18621862
type number2 uint64
18631863

1864-
func (n number2) MarshalCBOR(em EncMode) (data []byte, err error) {
1864+
func (n number2) MarshalCBOR() (data []byte, err error) {
18651865
m := map[string]uint64{"num": uint64(n)}
1866-
return em.Marshal(m)
1866+
return Marshal(m)
18671867
}
18681868

1869-
func (n *number2) UnmarshalCBOR(dm DecMode, data []byte) (err error) {
1869+
func (n *number2) UnmarshalCBOR(data []byte) (err error) {
18701870
var v map[string]uint64
1871-
if err := dm.Unmarshal(data, &v); err != nil {
1871+
if err := Unmarshal(data, &v); err != nil {
18721872
return err
18731873
}
18741874
*n = number2(v["num"])
@@ -1879,14 +1879,14 @@ type stru2 struct {
18791879
a, b, c string
18801880
}
18811881

1882-
func (s *stru2) MarshalCBOR(em EncMode) ([]byte, error) {
1882+
func (s *stru2) MarshalCBOR() ([]byte, error) {
18831883
v := []string{s.a, s.b, s.c}
1884-
return em.Marshal(v)
1884+
return Marshal(v)
18851885
}
18861886

1887-
func (s *stru2) UnmarshalCBOR(dm DecMode, data []byte) (err error) {
1887+
func (s *stru2) UnmarshalCBOR(data []byte) (err error) {
18881888
var v []string
1889-
if err := dm.Unmarshal(data, &v); err != nil {
1889+
if err := Unmarshal(data, &v); err != nil {
18901890
return err
18911891
}
18921892
if len(v) > 0 {
@@ -1903,7 +1903,7 @@ func (s *stru2) UnmarshalCBOR(dm DecMode, data []byte) (err error) {
19031903

19041904
type marshalCBORError string
19051905

1906-
func (n marshalCBORError) MarshalCBOR(em EncMode) (data []byte, err error) {
1906+
func (n marshalCBORError) MarshalCBOR() (data []byte, err error) {
19071907
return nil, errors.New(string(n))
19081908
}
19091909

encode.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func Marshal(v interface{}) ([]byte, error) {
8888
// Marshaler is the interface implemented by types that can marshal themselves
8989
// into valid CBOR.
9090
type Marshaler interface {
91-
MarshalCBOR(EncMode) ([]byte, error)
91+
MarshalCBOR() ([]byte, error)
9292
}
9393

9494
// UnsupportedTypeError is returned by Marshal when attempting to encode an
@@ -1003,7 +1003,7 @@ func encodeMarshalerType(e *encodeState, em *encMode, v reflect.Value) (int, err
10031003
pv.Elem().Set(v)
10041004
m = pv.Interface().(Marshaler)
10051005
}
1006-
data, err := m.MarshalCBOR(em)
1006+
data, err := m.MarshalCBOR()
10071007
if err != nil {
10081008
return 0, err
10091009
}

stream.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -179,15 +179,15 @@ func (enc *Encoder) startIndefinite(typ cborType) error {
179179
type RawMessage []byte
180180

181181
// MarshalCBOR returns m as the CBOR encoding of m.
182-
func (m RawMessage) MarshalCBOR(em EncMode) ([]byte, error) {
182+
func (m RawMessage) MarshalCBOR() ([]byte, error) {
183183
if len(m) == 0 {
184184
return cborNil, nil
185185
}
186186
return m, nil
187187
}
188188

189189
// UnmarshalCBOR sets *m to a copy of data.
190-
func (m *RawMessage) UnmarshalCBOR(dm DecMode, data []byte) error {
190+
func (m *RawMessage) UnmarshalCBOR(data []byte) error {
191191
if m == nil {
192192
return errors.New("cbor.RawMessage: UnmarshalCBOR on nil pointer")
193193
}

0 commit comments

Comments
 (0)