From bb07ce3eedabb2133227ba1d7569d171d8e5b25c Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Mon, 21 Dec 2015 21:05:20 +0100 Subject: rlp: add "tail" struct tag --- rlp/decode_tail_test.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 rlp/decode_tail_test.go (limited to 'rlp/decode_tail_test.go') diff --git a/rlp/decode_tail_test.go b/rlp/decode_tail_test.go new file mode 100644 index 000000000..885354390 --- /dev/null +++ b/rlp/decode_tail_test.go @@ -0,0 +1,33 @@ +package rlp + +import ( + "bytes" + "fmt" +) + +type structWithTail struct { + A, B uint + C []uint `rlp:"tail"` +} + +func ExampleDecode_structTagTail() { + // In this example, the "tail" struct tag is used to decode lists of + // differing length into a struct. + var val structWithTail + + err := Decode(bytes.NewReader([]byte{0xC4, 0x01, 0x02, 0x03, 0x04}), &val) + fmt.Printf("with 4 elements: err=%v val=%v\n", err, val) + + err = Decode(bytes.NewReader([]byte{0xC6, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06}), &val) + fmt.Printf("with 6 elements: err=%v val=%v\n", err, val) + + // Note that at least two list elements must be present to + // fill fields A and B: + err = Decode(bytes.NewReader([]byte{0xC1, 0x01}), &val) + fmt.Printf("with 1 element: err=%q\n", err) + + // Output: + // with 4 elements: err= val={1 2 [3 4]} + // with 6 elements: err= val={1 2 [3 4 5 6]} + // with 1 element: err="rlp: too few elements for rlp.structWithTail" +} -- cgit