aboutsummaryrefslogtreecommitdiffstats
path: root/rlp/encoder_example_test.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2014-12-30 18:40:32 +0800
committerFelix Lange <fjl@twurst.com>2015-01-15 18:00:19 +0800
commit552f5b2693a5d19c126a8116d36ba1f4f6cb76a1 (patch)
treea28efc122113ab7bb48df40ad3215af304cada2c /rlp/encoder_example_test.go
parentbb55307a9d8fa73b0fbc0727f8b80925a87627b7 (diff)
downloadgo-tangerine-552f5b2693a5d19c126a8116d36ba1f4f6cb76a1.tar.gz
go-tangerine-552f5b2693a5d19c126a8116d36ba1f4f6cb76a1.tar.zst
go-tangerine-552f5b2693a5d19c126a8116d36ba1f4f6cb76a1.zip
rlp: add functions for encoding
I'm reasonably confident that the encoding matches the output of ethutil.Encode for values that it supports. Some of the tests have been adpated from the Ethereum testing repository. There are still TODOs in the code.
Diffstat (limited to 'rlp/encoder_example_test.go')
-rw-r--r--rlp/encoder_example_test.go38
1 files changed, 38 insertions, 0 deletions
diff --git a/rlp/encoder_example_test.go b/rlp/encoder_example_test.go
new file mode 100644
index 000000000..57bad604d
--- /dev/null
+++ b/rlp/encoder_example_test.go
@@ -0,0 +1,38 @@
+package rlp
+
+import (
+ "fmt"
+ "io"
+)
+
+type MyCoolType struct {
+ Name string
+ a, b uint
+}
+
+// EncodeRLP writes x as RLP list [a, b] that omits the Name field.
+func (x *MyCoolType) EncodeRLP(w io.Writer) (err error) {
+ // Note: the receiver can be a nil pointer. This allows you to
+ // control the encoding of nil, but it also means that you have to
+ // check for a nil receiver.
+ if x == nil {
+ err = Encode(w, []uint{0, 0})
+ } else {
+ err = Encode(w, []uint{x.a, x.b})
+ }
+ return err
+}
+
+func ExampleEncoder() {
+ var t *MyCoolType // t is nil pointer to MyCoolType
+ bytes, _ := EncodeToBytes(t)
+ fmt.Printf("%v → %X\n", t, bytes)
+
+ t = &MyCoolType{Name: "foobar", a: 5, b: 6}
+ bytes, _ = EncodeToBytes(t)
+ fmt.Printf("%v → %X\n", t, bytes)
+
+ // Output:
+ // <nil> → C28080
+ // &{foobar 5 6} → C20506
+}