Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make MarshalBinary the non-length prefixed default #222

Merged
merged 3 commits into from
Oct 15, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 33 additions & 33 deletions amino.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,16 @@ func init() {
}
}

func MarshalBinary(o interface{}) ([]byte, error) {
return gcdc.MarshalBinary(o)
func MarshalBinaryLengthPrefixed(o interface{}) ([]byte, error) {
return gcdc.MarshalBinaryLengthPrefixed(o)
}

func MarshalBinaryWriter(w io.Writer, o interface{}) (n int64, err error) {
return gcdc.MarshalBinaryWriter(w, o)
func MarshalBinaryLengthPrefixedWriter(w io.Writer, o interface{}) (n int64, err error) {
return gcdc.MarshalBinaryLengthPrefixedWriter(w, o)
}

func MustMarshalBinary(o interface{}) []byte {
return gcdc.MustMarshalBinary(o)
func MustMarshalBinaryLengthPrefixed(o interface{}) []byte {
return gcdc.MustMarshalBinaryLengthPrefixed(o)
}

func MarshalBinaryBare(o interface{}) ([]byte, error) {
Expand All @@ -52,16 +52,16 @@ func MustMarshalBinaryBare(o interface{}) []byte {
return gcdc.MustMarshalBinaryBare(o)
}

func UnmarshalBinary(bz []byte, ptr interface{}) error {
return gcdc.UnmarshalBinary(bz, ptr)
func UnmarshalBinaryLengthPrefixed(bz []byte, ptr interface{}) error {
return gcdc.UnmarshalBinaryLengthPrefixedBinary(bz, ptr)
}

func UnmarshalBinaryReader(r io.Reader, ptr interface{}, maxSize int64) (n int64, err error) {
return gcdc.UnmarshalBinaryReader(r, ptr, maxSize)
func UnmarshalBinaryLengthPrefixedReader(r io.Reader, ptr interface{}, maxSize int64) (n int64, err error) {
return gcdc.UnmarshalBinaryLengthPrefixedReader(r, ptr, maxSize)
}

func MustUnmarshalBinary(bz []byte, ptr interface{}) {
gcdc.MustUnmarshalBinary(bz, ptr)
func MustUnmarshalBinaryLengthPrefixed(bz []byte, ptr interface{}) {
gcdc.MustUnmarshalBinaryLengthPrefixed(bz, ptr)
}

func UnmarshalBinaryBare(bz []byte, ptr interface{}) error {
Expand Down Expand Up @@ -127,14 +127,14 @@ func (typ Typ3) String() string {
//----------------------------------------
// *Codec methods

// MarshalBinary encodes the object o according to the Amino spec,
// MarshalBinaryLengthPrefixed encodes the object o according to the Amino spec,
// but prefixed by a uvarint encoding of the object to encode.
// Use MarshalBinaryBare if you don't want byte-length prefixing.
//
// For consistency, MarshalBinary will first dereference pointers
// before encoding. MarshalBinary will panic if o is a nil-pointer,
// For consistency, MarshalBinaryLengthPrefixed will first dereference pointers
// before encoding. MarshalBinaryLengthPrefixed will panic if o is a nil-pointer,
// or if o is invalid.
func (cdc *Codec) MarshalBinary(o interface{}) ([]byte, error) {
func (cdc *Codec) MarshalBinaryLengthPrefixed(o interface{}) ([]byte, error) {

// Write the bytes here.
var buf = new(bytes.Buffer)
Expand All @@ -160,11 +160,11 @@ func (cdc *Codec) MarshalBinary(o interface{}) ([]byte, error) {
return buf.Bytes(), nil
}

// MarshalBinaryWriter writes the bytes as would be returned from
// MarshalBinary to the writer w.
func (cdc *Codec) MarshalBinaryWriter(w io.Writer, o interface{}) (n int64, err error) {
// MarshalBinaryLengthPrefixedWriter writes the bytes as would be returned from
// MarshalBinaryLengthPrefixed to the writer w.
func (cdc *Codec) MarshalBinaryLengthPrefixedWriter(w io.Writer, o interface{}) (n int64, err error) {
var bz, _n = []byte(nil), int(0)
bz, err = cdc.MarshalBinary(o)
bz, err = cdc.MarshalBinaryLengthPrefixed(o)
if err != nil {
return 0, err
}
Expand All @@ -174,8 +174,8 @@ func (cdc *Codec) MarshalBinaryWriter(w io.Writer, o interface{}) (n int64, err
}

// Panics if error.
func (cdc *Codec) MustMarshalBinary(o interface{}) []byte {
bz, err := cdc.MarshalBinary(o)
func (cdc *Codec) MustMarshalBinaryLengthPrefixed(o interface{}) []byte {
bz, err := cdc.MarshalBinaryLengthPrefixed(o)
if err != nil {
panic(err)
}
Expand All @@ -191,8 +191,8 @@ func (cdc *Codec) MarshalBinaryBare(o interface{}) ([]byte, error) {
var rv, _, isNilPtr = derefPointers(reflect.ValueOf(o))
if isNilPtr {
// NOTE: You can still do so by calling
// `.MarshalBinary(struct{ *SomeType })` or so on.
panic("MarshalBinary cannot marshal a nil pointer directly. Try wrapping in a struct?")
// `.MarshalBinaryLengthPrefixed(struct{ *SomeType })` or so on.
panic("MarshalBinaryBare cannot marshal a nil pointer directly. Try wrapping in a struct?")
}

// Encode Amino:binary bytes.
Expand Down Expand Up @@ -228,11 +228,11 @@ func (cdc *Codec) MustMarshalBinaryBare(o interface{}) []byte {
}

// Like UnmarshalBinaryBare, but will first decode the byte-length prefix.
// UnmarshalBinary will panic if ptr is a nil-pointer.
// UnmarshalBinaryLengthPrefixedBinary will panic if ptr is a nil-pointer.
// Returns an error if not all of bz is consumed.
func (cdc *Codec) UnmarshalBinary(bz []byte, ptr interface{}) error {
func (cdc *Codec) UnmarshalBinaryLengthPrefixedBinary(bz []byte, ptr interface{}) error {
if len(bz) == 0 {
return errors.New("UnmarshalBinary cannot decode empty bytes")
return errors.New("UnmarshalBinaryLengthPrefixedBinary cannot decode empty bytes")
}

// Read byte-length prefix.
Expand All @@ -241,10 +241,10 @@ func (cdc *Codec) UnmarshalBinary(bz []byte, ptr interface{}) error {
return fmt.Errorf("Error reading msg byte-length prefix: got code %v", n)
}
if u64 > uint64(len(bz)-n) {
return fmt.Errorf("Not enough bytes to read in UnmarshalBinary, want %v more bytes but only have %v",
return fmt.Errorf("Not enough bytes to read in UnmarshalBinaryLengthPrefixedBinary, want %v more bytes but only have %v",
u64, len(bz)-n)
} else if u64 < uint64(len(bz)-n) {
return fmt.Errorf("Bytes left over in UnmarshalBinary, should read %v more bytes but have %v",
return fmt.Errorf("Bytes left over in UnmarshalBinaryLengthPrefixedBinary, should read %v more bytes but have %v",
u64, len(bz)-n)
}
bz = bz[n:]
Expand All @@ -254,9 +254,9 @@ func (cdc *Codec) UnmarshalBinary(bz []byte, ptr interface{}) error {
}

// Like UnmarshalBinaryBare, but will first read the byte-length prefix.
// UnmarshalBinaryReader will panic if ptr is a nil-pointer.
// UnmarshalBinaryLengthPrefixedReader will panic if ptr is a nil-pointer.
// If maxSize is 0, there is no limit (not recommended).
func (cdc *Codec) UnmarshalBinaryReader(r io.Reader, ptr interface{}, maxSize int64) (n int64, err error) {
func (cdc *Codec) UnmarshalBinaryLengthPrefixedReader(r io.Reader, ptr interface{}, maxSize int64) (n int64, err error) {
if maxSize < 0 {
panic("maxSize cannot be negative.")
}
Expand Down Expand Up @@ -310,8 +310,8 @@ func (cdc *Codec) UnmarshalBinaryReader(r io.Reader, ptr interface{}, maxSize in
}

// Panics if error.
func (cdc *Codec) MustUnmarshalBinary(bz []byte, ptr interface{}) {
err := cdc.UnmarshalBinary(bz, ptr)
func (cdc *Codec) MustUnmarshalBinaryLengthPrefixed(bz []byte, ptr interface{}) {
err := cdc.UnmarshalBinaryLengthPrefixedBinary(bz, ptr)
if err != nil {
panic(err)
}
Expand Down
46 changes: 23 additions & 23 deletions amino_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,12 +24,12 @@ func TestMarshalBinary(t *testing.T) {
Time: time.Now().UTC().Truncate(time.Millisecond), // strip monotonic and timezone.
}

b, err := cdc.MarshalBinary(s)
b, err := cdc.MarshalBinaryLengthPrefixed(s)
assert.Nil(t, err)
t.Logf("MarshalBinary(s) -> %X", b)
t.Logf("MarshalBinaryLengthPrefixed(s) -> %X", b)

var s2 SimpleStruct
err = cdc.UnmarshalBinary(b, &s2)
err = cdc.UnmarshalBinaryLengthPrefixedBinary(b, &s2)
assert.Nil(t, err)
assert.Equal(t, s, s2)
}
Expand All @@ -49,12 +49,12 @@ func TestUnmarshalBinaryReader(t *testing.T) {
Time: time.Now().UTC().Truncate(time.Millisecond), // strip monotonic and timezone.
}

b, err := cdc.MarshalBinary(s)
b, err := cdc.MarshalBinaryLengthPrefixed(s)
assert.Nil(t, err)
t.Logf("MarshalBinary(s) -> %X", b)
t.Logf("MarshalBinaryLengthPrefixed(s) -> %X", b)

var s2 SimpleStruct
_, err = cdc.UnmarshalBinaryReader(bytes.NewBuffer(b), &s2, 0)
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer(b), &s2, 0)
assert.Nil(t, err)

assert.Equal(t, s, s2)
Expand All @@ -64,13 +64,13 @@ func TestUnmarshalBinaryReaderSize(t *testing.T) {
var cdc = amino.NewCodec()

var s1 string = "foo"
b, err := cdc.MarshalBinary(s1)
b, err := cdc.MarshalBinaryLengthPrefixed(s1)
assert.Nil(t, err)
t.Logf("MarshalBinary(s) -> %X", b)
t.Logf("MarshalBinaryLengthPrefixed(s) -> %X", b)

var s2 string
var n int64
n, err = cdc.UnmarshalBinaryReader(bytes.NewBuffer(b), &s2, 0)
n, err = cdc.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer(b), &s2, 0)
assert.Nil(t, err)
assert.Equal(t, s1, s2)
frameLengthBytes, msgLengthBytes := 1, 1
Expand All @@ -81,15 +81,15 @@ func TestUnmarshalBinaryReaderSizeLimit(t *testing.T) {
var cdc = amino.NewCodec()

var s1 string = "foo"
b, err := cdc.MarshalBinary(s1)
b, err := cdc.MarshalBinaryLengthPrefixed(s1)
assert.Nil(t, err)
t.Logf("MarshalBinary(s) -> %X", b)
t.Logf("MarshalBinaryLengthPrefixed(s) -> %X", b)

var s2 string
var n int64
n, err = cdc.UnmarshalBinaryReader(bytes.NewBuffer(b), &s2, int64(len(b)-1))
n, err = cdc.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer(b), &s2, int64(len(b)-1))
assert.NotNil(t, err, "insufficient limit should lead to failure")
n, err = cdc.UnmarshalBinaryReader(bytes.NewBuffer(b), &s2, int64(len(b)))
n, err = cdc.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer(b), &s2, int64(len(b)))
assert.Nil(t, err, "sufficient limit should not cause failure")
assert.Equal(t, s1, s2)
frameLengthBytes, msgLengthBytes := 1, 1
Expand All @@ -111,12 +111,12 @@ func TestUnmarshalBinaryReaderTooLong(t *testing.T) {
Time: time.Now().UTC().Truncate(time.Millisecond), // strip monotonic and timezone.
}

b, err := cdc.MarshalBinary(s)
b, err := cdc.MarshalBinaryLengthPrefixed(s)
assert.Nil(t, err)
t.Logf("MarshalBinary(s) -> %X", b)
t.Logf("MarshalBinaryLengthPrefixed(s) -> %X", b)

var s2 SimpleStruct
_, err = cdc.UnmarshalBinaryReader(bytes.NewBuffer(b), &s2, 1) // 1 byte limit is ridiculous.
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(bytes.NewBuffer(b), &s2, 1) // 1 byte limit is ridiculous.
assert.NotNil(t, err)
}

Expand All @@ -126,26 +126,26 @@ func TestUnmarshalBinaryBufferedWritesReads(t *testing.T) {

// Write 3 times.
var s1 string = "foo"
_, err := cdc.MarshalBinaryWriter(buf, s1)
_, err := cdc.MarshalBinaryLengthPrefixedWriter(buf, s1)
assert.Nil(t, err)
_, err = cdc.MarshalBinaryWriter(buf, s1)
_, err = cdc.MarshalBinaryLengthPrefixedWriter(buf, s1)
assert.Nil(t, err)
_, err = cdc.MarshalBinaryWriter(buf, s1)
_, err = cdc.MarshalBinaryLengthPrefixedWriter(buf, s1)
assert.Nil(t, err)

// Read 3 times.
var s2 string
_, err = cdc.UnmarshalBinaryReader(buf, &s2, 0)
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(buf, &s2, 0)
assert.Nil(t, err)
assert.Equal(t, s1, s2)
_, err = cdc.UnmarshalBinaryReader(buf, &s2, 0)
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(buf, &s2, 0)
assert.Nil(t, err)
assert.Equal(t, s1, s2)
_, err = cdc.UnmarshalBinaryReader(buf, &s2, 0)
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(buf, &s2, 0)
assert.Nil(t, err)
assert.Equal(t, s1, s2)

// Reading 4th time fails.
_, err = cdc.UnmarshalBinaryReader(buf, &s2, 0)
_, err = cdc.UnmarshalBinaryLengthPrefixedReader(buf, &s2, 0)
assert.NotNil(t, err)
}
18 changes: 9 additions & 9 deletions binary_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ func TestNilSliceEmptySlice(t *testing.T) {
F: []*[]int{&eei},
}

abz := cdc.MustMarshalBinary(a)
bbz := cdc.MustMarshalBinary(b)
cbz := cdc.MustMarshalBinary(c)
abz := cdc.MustMarshalBinaryLengthPrefixed(a)
bbz := cdc.MustMarshalBinaryLengthPrefixed(b)
cbz := cdc.MustMarshalBinaryLengthPrefixed(c)

assert.Equal(t, abz, bbz, "a != b")
assert.Equal(t, abz, cbz, "a != c")
Expand Down Expand Up @@ -191,11 +191,11 @@ func TestStructPointerSlice1(t *testing.T) {
C: []*Foo{nil, nil, nil},
D: "j",
}
bz, err := cdc.MarshalBinary(f)
bz, err := cdc.MarshalBinaryLengthPrefixed(f)
assert.NoError(t, err)

var f2 Foo
err = cdc.UnmarshalBinary(bz, &f2)
err = cdc.UnmarshalBinaryLengthPrefixedBinary(bz, &f2)
assert.Nil(t, err)

assert.Equal(t, f, f2)
Expand All @@ -207,7 +207,7 @@ func TestStructPointerSlice1(t *testing.T) {
C: []*Foo{&Foo{}, &Foo{}, &Foo{}},
D: "j",
}
bz2, err := cdc.MarshalBinary(f3)
bz2, err := cdc.MarshalBinaryLengthPrefixed(f3)
assert.NoError(t, err)
assert.Equal(t, bz, bz2, "empty slices should be decoded to nil unless empty_elements")
}
Expand All @@ -229,15 +229,15 @@ func TestStructPointerSlice2(t *testing.T) {
C: []*Foo{nil, nil, nil},
D: "j",
}
bz, err := cdc.MarshalBinary(f)
bz, err := cdc.MarshalBinaryLengthPrefixed(f)
assert.Error(t, err, "nil elements of a slice/array not supported when empty_elements field tag set.")

f.C = []*Foo{&Foo{}, &Foo{}, &Foo{}}
bz, err = cdc.MarshalBinary(f)
bz, err = cdc.MarshalBinaryLengthPrefixed(f)
assert.NoError(t, err)

var f2 Foo
err = cdc.UnmarshalBinary(bz, &f2)
err = cdc.UnmarshalBinaryLengthPrefixedBinary(bz, &f2)
assert.Nil(t, err)

assert.Equal(t, f, f2)
Expand Down
4 changes: 2 additions & 2 deletions byteslice_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ func TestReadByteSliceEquality(t *testing.T) {

// Write a byteslice
var testBytes = []byte("ThisIsSomeTestArray")
encoded, err = cdc.MarshalBinary(testBytes)
encoded, err = cdc.MarshalBinaryLengthPrefixed(testBytes)
if err != nil {
t.Error(err.Error())
}

// Read the byteslice, should return the same byteslice
var testBytes2 []byte
err = cdc.UnmarshalBinary(encoded, &testBytes2)
err = cdc.UnmarshalBinaryLengthPrefixedBinary(encoded, &testBytes2)
if err != nil {
t.Error(err.Error())
}
Expand Down
Loading