51 lines
1.1 KiB
Go
51 lines
1.1 KiB
Go
|
package result
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
"math/big"
|
||
|
|
||
|
"github.com/nspcc-dev/neo-go/pkg/encoding/address"
|
||
|
"github.com/nspcc-dev/neo-go/pkg/util"
|
||
|
)
|
||
|
|
||
|
// UnclaimedGas response wrapper
|
||
|
type UnclaimedGas struct {
|
||
|
Address util.Uint160
|
||
|
Unclaimed big.Int
|
||
|
}
|
||
|
|
||
|
// unclaimedGas is an auxiliary struct for JSON marhsalling
|
||
|
type unclaimedGas struct {
|
||
|
Address string `json:"address"`
|
||
|
Unclaimed string `json:"unclaimed"`
|
||
|
}
|
||
|
|
||
|
// MarshalJSON implements json.Marshaler interface.
|
||
|
func (g UnclaimedGas) MarshalJSON() ([]byte, error) {
|
||
|
gas := &unclaimedGas{
|
||
|
Address: address.Uint160ToString(g.Address),
|
||
|
Unclaimed: g.Unclaimed.String(),
|
||
|
}
|
||
|
return json.Marshal(gas)
|
||
|
}
|
||
|
|
||
|
// UnmarshalJSON implements json.Unmarshaler interface.
|
||
|
func (g *UnclaimedGas) UnmarshalJSON(data []byte) error {
|
||
|
gas := new(unclaimedGas)
|
||
|
if err := json.Unmarshal(data, gas); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
uncl, ok := new(big.Int).SetString(gas.Unclaimed, 10)
|
||
|
if !ok {
|
||
|
return errors.New("failed to convert unclaimed gas")
|
||
|
}
|
||
|
g.Unclaimed = *uncl
|
||
|
addr, err := address.StringToUint160(gas.Address)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
g.Address = addr
|
||
|
return nil
|
||
|
}
|