github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/core/native/native_neo_candidate.go (about)

     1  package native
     2  
     3  import (
     4  	"math/big"
     5  
     6  	"github.com/nspcc-dev/neo-go/pkg/vm/stackitem"
     7  )
     8  
     9  type candidate struct {
    10  	Registered bool
    11  	Votes      big.Int
    12  }
    13  
    14  // FromBytes unmarshals a candidate from the byte array.
    15  func (c *candidate) FromBytes(data []byte) *candidate {
    16  	err := stackitem.DeserializeConvertible(data, c)
    17  	if err != nil {
    18  		panic(err)
    19  	}
    20  	return c
    21  }
    22  
    23  // ToStackItem implements stackitem.Convertible. It never returns an error.
    24  func (c *candidate) ToStackItem() (stackitem.Item, error) {
    25  	return stackitem.NewStruct([]stackitem.Item{
    26  		stackitem.NewBool(c.Registered),
    27  		stackitem.NewBigInteger(&c.Votes),
    28  	}), nil
    29  }
    30  
    31  // FromStackItem implements stackitem.Convertible.
    32  func (c *candidate) FromStackItem(item stackitem.Item) error {
    33  	arr := item.(*stackitem.Struct).Value().([]stackitem.Item)
    34  	vs, err := arr[1].TryInteger()
    35  	if err != nil {
    36  		return err
    37  	}
    38  	reg, err := arr[0].TryBool()
    39  	if err != nil {
    40  		return err
    41  	}
    42  	c.Registered = reg
    43  	c.Votes = *vs
    44  	return nil
    45  }