Skip to content

Commit

Permalink
rpcbindings: produce ToStackItem companion method
Browse files Browse the repository at this point in the history
We need it for structs to be usable as function parameters, otherwise
they're not implementing stackitam.Convertible and they fail at transaction
script creation phase:

    2025/01/22 20:31:26 bootstrap error: could not invoke method (addNode): test invocation failed: unsupported operation: *netmap.NetmapNode2 type

Related to nspcc-dev/neofs-node#3088.

Signed-off-by: Roman Khimov <[email protected]>
  • Loading branch information
roman-khimov committed Jan 23, 2025
1 parent 673b26f commit 58f4240
Show file tree
Hide file tree
Showing 9 changed files with 1,817 additions and 3 deletions.
27 changes: 27 additions & 0 deletions cli/smartcontract/testdata/rpcbindings/nft-nd/rpcbindings.out
Original file line number Diff line number Diff line change
Expand Up @@ -247,3 +247,30 @@ func (res *NftRoyaltyRecipientShare) FromStackItem(item stackitem.Item) error {

return nil
}

// ToStackItem creates [stackitem.Item] representing NftRoyaltyRecipientShare.
// It implements [stackitem.Convertible] interface.
func (res *NftRoyaltyRecipientShare) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 2)
)
itm, err = stackitem.NewByteArray(res.Address.BytesBE()), error(nil)
if err != nil {
return fmt.Errorf("field Address: %w", err)
}
items = append(items, itm)

itm, err = (*stackitem.BigInteger)(res.Share), error(nil)
if err != nil {
return fmt.Errorf("field Share: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -242,3 +242,30 @@ func (res *NftRoyaltyRecipientShare) FromStackItem(item stackitem.Item) error {

return nil
}

// ToStackItem creates [stackitem.Item] representing NftRoyaltyRecipientShare.
// It implements [stackitem.Convertible] interface.
func (res *NftRoyaltyRecipientShare) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 2)
)
itm, err = stackitem.NewByteArray(res.Address.BytesBE()), error(nil)
if err != nil {
return fmt.Errorf("field Address: %w", err)
}
items = append(items, itm)

itm, err = (*stackitem.BigInteger)(res.Share), error(nil)
if err != nil {
return fmt.Errorf("field Share: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,33 @@ func (res *CrazyStruct) FromStackItem(item stackitem.Item) error {
return nil
}

// ToStackItem creates [stackitem.Item] representing CrazyStruct.
// It implements [stackitem.Convertible] interface.
func (res *CrazyStruct) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 2)
)
itm, err = (*stackitem.BigInteger)(res.I), error(nil)
if err != nil {
return fmt.Errorf("field I: %w", err)
}
items = append(items, itm)

itm, err = stackitem.NewBool(res.B), error(nil)
if err != nil {
return fmt.Errorf("field B: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}

// itemToSimpleStruct converts stack item into *SimpleStruct.
// NULL item is returned as nil pointer without error.
func itemToSimpleStruct(item stackitem.Item, err error) (*SimpleStruct, error) {
Expand Down Expand Up @@ -269,6 +296,27 @@ func (res *SimpleStruct) FromStackItem(item stackitem.Item) error {
return nil
}

// ToStackItem creates [stackitem.Item] representing SimpleStruct.
// It implements [stackitem.Convertible] interface.
func (res *SimpleStruct) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 1)
)
itm, err = (*stackitem.BigInteger)(res.I), error(nil)
if err != nil {
return fmt.Errorf("field I: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}

// ComplicatedNameEventsFromApplicationLog retrieves a set of all emitted events
// with "! complicated name %$#" name from the provided [result.ApplicationLog].
func ComplicatedNameEventsFromApplicationLog(log *result.ApplicationLog) ([]*ComplicatedNameEvent, error) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,33 @@ func (res *Unnamed) FromStackItem(item stackitem.Item) error {
return nil
}

// ToStackItem creates [stackitem.Item] representing Unnamed.
// It implements [stackitem.Convertible] interface.
func (res *Unnamed) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 2)
)
itm, err = (*stackitem.BigInteger)(res.I), error(nil)
if err != nil {
return fmt.Errorf("field I: %w", err)
}
items = append(items, itm)

itm, err = stackitem.NewBool(res.B), error(nil)
if err != nil {
return fmt.Errorf("field B: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}

// itemToUnnamedX converts stack item into *UnnamedX.
// NULL item is returned as nil pointer without error.
func itemToUnnamedX(item stackitem.Item, err error) (*UnnamedX, error) {
Expand Down Expand Up @@ -269,6 +296,27 @@ func (res *UnnamedX) FromStackItem(item stackitem.Item) error {
return nil
}

// ToStackItem creates [stackitem.Item] representing UnnamedX.
// It implements [stackitem.Convertible] interface.
func (res *UnnamedX) ToStackItem() (stackitem.Item, error) {
if res == nil {
return stackitem.Null{}, nil
}

var (
err error
itm stackitem.Item
items = make([]stackitem.Item, 0, 1)
)
itm, err = (*stackitem.BigInteger)(res.I), error(nil)
if err != nil {
return fmt.Errorf("field I: %w", err)
}
items = append(items, itm)

return stackitem.NewStruct(items), nil
}

// ComplicatedNameEventsFromApplicationLog retrieves a set of all emitted events
// with "! complicated name %$#" name from the provided [result.ApplicationLog].
func ComplicatedNameEventsFromApplicationLog(log *result.ApplicationLog) ([]*ComplicatedNameEvent, error) {
Expand Down
Loading

0 comments on commit 58f4240

Please sign in to comment.