forked from fxamacker/cbor
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Make ByteString support any CBOR byte string
This commit makes ByteString support CBOR byte string (major type 2) without being limited to map keys. ByteString can be used when using a []byte is not possible or convenient. For example, Go doesn't allow []byte as map key, so ByteString can be used to support data formats having CBOR map with byte string keys. ByteString can also be used to encode invalid UTF-8 string as CBOR byte string. - Modified ByteString to use string type. - Implemented cbor.Marshaller and cbor.Unmarshaller for ByteString. - Simplified ByteString encoding and decoding. - Renamed MapKeyByteStringFail to MapKeyByteStringForbidden. - Renamed MapKeyByteStringWrap to MapKeyByteStringAllowed. - Added more tests for ByteString.
- Loading branch information
Showing
6 changed files
with
286 additions
and
193 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
// Copyright (c) Faye Amacker. All rights reserved. | ||
// Licensed under the MIT License. See LICENSE in the project root for license information. | ||
|
||
package cbor | ||
|
||
import "testing" | ||
|
||
func TestByteString(t *testing.T) { | ||
type s1 struct { | ||
A ByteString `cbor:"a"` | ||
} | ||
type s2 struct { | ||
A *ByteString `cbor:"a"` | ||
} | ||
type s3 struct { | ||
A ByteString `cbor:"a,omitempty"` | ||
} | ||
type s4 struct { | ||
A *ByteString `cbor:"a,omitempty"` | ||
} | ||
|
||
emptybs := ByteString("") | ||
bs := ByteString("\x01\x02\x03\x04") | ||
|
||
testCases := []roundTripTest{ | ||
{ | ||
name: "empty", | ||
obj: emptybs, | ||
wantCborData: hexDecode("40"), | ||
}, | ||
{ | ||
name: "not empty", | ||
obj: bs, | ||
wantCborData: hexDecode("4401020304"), | ||
}, | ||
{ | ||
name: "array", | ||
obj: []ByteString{bs}, | ||
wantCborData: hexDecode("814401020304"), | ||
}, | ||
{ | ||
name: "map with ByteString key", | ||
obj: map[ByteString]bool{bs: true}, | ||
wantCborData: hexDecode("a14401020304f5"), | ||
}, | ||
{ | ||
name: "empty ByteString field", | ||
obj: s1{}, | ||
wantCborData: hexDecode("a1616140"), | ||
}, | ||
{ | ||
name: "not empty ByteString field", | ||
obj: s1{A: bs}, | ||
wantCborData: hexDecode("a161614401020304"), | ||
}, | ||
{ | ||
name: "nil *ByteString field", | ||
obj: s2{}, | ||
wantCborData: hexDecode("a16161f6"), | ||
}, | ||
{ | ||
name: "empty *ByteString field", | ||
obj: s2{A: &emptybs}, | ||
wantCborData: hexDecode("a1616140"), | ||
}, | ||
{ | ||
name: "not empty *ByteString field", | ||
obj: s2{A: &bs}, | ||
wantCborData: hexDecode("a161614401020304"), | ||
}, | ||
{ | ||
name: "empty ByteString field with omitempty option", | ||
obj: s3{}, | ||
wantCborData: hexDecode("a0"), | ||
}, | ||
{ | ||
name: "not empty ByteString field with omitempty option", | ||
obj: s3{A: bs}, | ||
wantCborData: hexDecode("a161614401020304"), | ||
}, | ||
{ | ||
name: "nil *ByteString field with omitempty option", | ||
obj: s4{}, | ||
wantCborData: hexDecode("a0"), | ||
}, | ||
{ | ||
name: "empty *ByteString field with omitempty option", | ||
obj: s4{A: &emptybs}, | ||
wantCborData: hexDecode("a1616140"), | ||
}, | ||
{ | ||
name: "not empty *ByteString field with omitempty option", | ||
obj: s4{A: &bs}, | ||
wantCborData: hexDecode("a161614401020304"), | ||
}, | ||
} | ||
|
||
em, _ := EncOptions{}.EncMode() | ||
dm, _ := DecOptions{}.DecMode() | ||
testRoundTrip(t, testCases, em, dm) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.