package native import ( "math/big" "github.com/nspcc-dev/neo-go/pkg/io" "github.com/nspcc-dev/neo-go/pkg/vm/stackitem" ) type candidate struct { Registered bool Votes big.Int } // Bytes marshals c to byte array. func (c *candidate) Bytes() []byte { w := io.NewBufBinWriter() stackitem.EncodeBinaryStackItem(c.toStackItem(), w.BinWriter) return w.Bytes() } // FromBytes unmarshals candidate from byte array. func (c *candidate) FromBytes(data []byte) *candidate { r := io.NewBinReaderFromBuf(data) item := stackitem.DecodeBinaryStackItem(r) if r.Err != nil { panic(r.Err) } return c.fromStackItem(item) } func (c *candidate) toStackItem() stackitem.Item { return stackitem.NewStruct([]stackitem.Item{ stackitem.NewBool(c.Registered), stackitem.NewBigInteger(&c.Votes), }) } func (c *candidate) fromStackItem(item stackitem.Item) *candidate { arr := item.(*stackitem.Struct).Value().([]stackitem.Item) vs, err := arr[1].TryInteger() if err != nil { panic(err) } c.Registered, err = arr[0].TryBool() if err != nil { panic(err) } c.Votes = *vs return c }