39 lines
810 B
Go
39 lines
810 B
Go
|
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
|
||
|
}
|