neoneo-go/pkg/core/native/native_neo_candidate.go
Roman Khimov 70ddbf7180 native: reuse stackitem.(De)Serialize more for data structures
Less code bloat, no functional changes.
2021-07-19 15:42:42 +03:00

51 lines
1,005 B
Go

package native
import (
"math/big"
"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 {
res, err := stackitem.Serialize(c.toStackItem())
if err != nil {
panic(err)
}
return res
}
// FromBytes unmarshals candidate from byte array.
func (c *candidate) FromBytes(data []byte) *candidate {
item, err := stackitem.Deserialize(data)
if err != nil {
panic(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
}