good morning!!!!

Skip to content
Snippets Groups Projects
encoder_example_test.go 1.57 KiB
Newer Older
  • Learn to ignore specific revisions
  • // Copyright 2014 The go-ethereum Authors
    
    // This file is part of the go-ethereum library.
    
    // The go-ethereum library is free software: you can redistribute it and/or modify
    
    // it under the terms of the GNU Lesser General Public License as published by
    // the Free Software Foundation, either version 3 of the License, or
    // (at your option) any later version.
    //
    
    // The go-ethereum library is distributed in the hope that it will be useful,
    
    // but WITHOUT ANY WARRANTY; without even the implied warranty of
    
    // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    
    // GNU Lesser General Public License for more details.
    //
    // You should have received a copy of the GNU Lesser General Public License
    
    // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    
    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
    }