Add hexdata and hexnum types

This commit is contained in:
Taylor Gerring 2015-03-31 17:39:58 +02:00
parent 8b51582b53
commit 3a948b2dba

@ -19,8 +19,84 @@ package rpc
import (
"encoding/json"
"fmt"
"math/big"
"strings"
"github.com/ethereum/go-ethereum/common"
)
type hexdata struct {
data []byte
}
func (d *hexdata) MarshalJSON() ([]byte, error) {
v := common.Bytes2Hex(d.data)
return json.Marshal("0x" + v)
}
func (d *hexdata) UnmarshalJSON(b []byte) (err error) {
d.data = common.FromHex(string(b))
return nil
}
func newHexData(input interface{}) *hexdata {
d := new(hexdata)
switch input.(type) {
case []byte:
d.data = input.([]byte)
case common.Hash:
d.data = input.(common.Hash).Bytes()
case common.Address:
d.data = input.(common.Address).Bytes()
case *big.Int:
d.data = input.(*big.Int).Bytes()
case int64:
d.data = big.NewInt(input.(int64)).Bytes()
case uint64:
d.data = big.NewInt(int64(input.(uint64))).Bytes()
case int:
d.data = big.NewInt(int64(input.(int))).Bytes()
case uint:
d.data = big.NewInt(int64(input.(uint))).Bytes()
case string:
d.data = common.Big(input.(string)).Bytes()
default:
d.data = nil
}
return d
}
type hexnum struct {
data []byte
}
func (d *hexnum) MarshalJSON() ([]byte, error) {
// Get hex string from bytes
out := common.Bytes2Hex(d.data)
// Trim leading 0s
out = strings.Trim(out, "0")
// Output "0x0" when value is 0
if len(out) == 0 {
out = "0"
}
return json.Marshal("0x" + out)
}
func (d *hexnum) UnmarshalJSON(b []byte) (err error) {
d.data = common.FromHex(string(b))
return nil
}
func newHexNum(input interface{}) *hexnum {
d := new(hexnum)
d.data = newHexData(input).data
return d
}
type InvalidTypeError struct {
method string
msg string