File tree Expand file tree Collapse file tree 3 files changed +68
-14
lines changed Expand file tree Collapse file tree 3 files changed +68
-14
lines changed Original file line number Diff line number Diff line change @@ -67,16 +67,14 @@ func EncodeGeneric(src interface{}) ([]byte, error) {
67
67
return cborData , nil
68
68
}
69
69
70
- type IndefLengthList struct {
71
- Items []any
72
- }
70
+ type IndefLengthList []any
73
71
74
- func (i * IndefLengthList ) MarshalCBOR () ([]byte , error ) {
72
+ func (i IndefLengthList ) MarshalCBOR () ([]byte , error ) {
75
73
ret := []byte {
76
74
// Start indefinite-length list
77
75
0x9f ,
78
76
}
79
- for _ , item := range i . Items {
77
+ for _ , item := range [] any ( i ) {
80
78
data , err := Encode (& item )
81
79
if err != nil {
82
80
return nil , err
@@ -90,3 +88,25 @@ func (i *IndefLengthList) MarshalCBOR() ([]byte, error) {
90
88
)
91
89
return ret , nil
92
90
}
91
+
92
+ type IndefLengthByteString []any
93
+
94
+ func (i IndefLengthByteString ) MarshalCBOR () ([]byte , error ) {
95
+ ret := []byte {
96
+ // Start indefinite-length bytestring
97
+ 0x5f ,
98
+ }
99
+ for _ , item := range []any (i ) {
100
+ data , err := Encode (& item )
101
+ if err != nil {
102
+ return nil , err
103
+ }
104
+ ret = append (ret , data ... )
105
+ }
106
+ ret = append (
107
+ ret ,
108
+ // End indefinite length bytestring
109
+ byte (0xff ),
110
+ )
111
+ return ret , nil
112
+ }
Original file line number Diff line number Diff line change @@ -50,3 +50,43 @@ func TestEncode(t *testing.T) {
50
50
}
51
51
}
52
52
}
53
+
54
+ func TestEncodeIndefLengthList (t * testing.T ) {
55
+ expectedCborHex := "9f1904d219162eff"
56
+ tmpData := cbor.IndefLengthList {
57
+ 1234 ,
58
+ 5678 ,
59
+ }
60
+ cborData , err := cbor .Encode (tmpData )
61
+ if err != nil {
62
+ t .Fatalf ("failed to encode object to CBOR: %s" , err )
63
+ }
64
+ cborHex := hex .EncodeToString (cborData )
65
+ if cborHex != expectedCborHex {
66
+ t .Fatalf (
67
+ "object did not encode to expected CBOR\n got %s\n wanted: %s" ,
68
+ cborHex ,
69
+ expectedCborHex ,
70
+ )
71
+ }
72
+ }
73
+
74
+ func TestEncodeIndefLengthByteString (t * testing.T ) {
75
+ expectedCborHex := "5f440102030443abcdefff"
76
+ tmpData := cbor.IndefLengthByteString {
77
+ []byte {1 , 2 , 3 , 4 },
78
+ []byte {0xab , 0xcd , 0xef },
79
+ }
80
+ cborData , err := cbor .Encode (tmpData )
81
+ if err != nil {
82
+ t .Fatalf ("failed to encode object to CBOR: %s" , err )
83
+ }
84
+ cborHex := hex .EncodeToString (cborData )
85
+ if cborHex != expectedCborHex {
86
+ t .Fatalf (
87
+ "object did not encode to expected CBOR\n got %s\n wanted: %s" ,
88
+ cborHex ,
89
+ expectedCborHex ,
90
+ )
91
+ }
92
+ }
Original file line number Diff line number Diff line change @@ -93,9 +93,7 @@ func (m *MsgReplyTxIds) MarshalCBOR() ([]byte, error) {
93
93
}
94
94
tmp := []any {
95
95
MessageTypeReplyTxIds ,
96
- cbor.IndefLengthList {
97
- Items : items ,
98
- },
96
+ cbor .IndefLengthList (items ),
99
97
}
100
98
return cbor .Encode (tmp )
101
99
}
@@ -122,9 +120,7 @@ func (m *MsgRequestTxs) MarshalCBOR() ([]byte, error) {
122
120
}
123
121
tmp := []any {
124
122
MessageTypeRequestTxs ,
125
- cbor.IndefLengthList {
126
- Items : items ,
127
- },
123
+ cbor .IndefLengthList (items ),
128
124
}
129
125
return cbor .Encode (tmp )
130
126
}
@@ -151,9 +147,7 @@ func (m *MsgReplyTxs) MarshalCBOR() ([]byte, error) {
151
147
}
152
148
tmp := []any {
153
149
MessageTypeReplyTxs ,
154
- cbor.IndefLengthList {
155
- Items : items ,
156
- },
150
+ cbor .IndefLengthList (items ),
157
151
}
158
152
return cbor .Encode (tmp )
159
153
}
You can’t perform that action at this time.
0 commit comments