Better nil handling

pull/619/head
Taylor Gerring 10 years ago
parent 5d8be9c30d
commit c71ca1a089
  1. 27
      rpc/types.go

@ -24,10 +24,12 @@ import (
"strings" "strings"
"github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/core/types"
) )
type hexdata struct { type hexdata struct {
data []byte data []byte
isNil bool
} }
func (d *hexdata) String() string { func (d *hexdata) String() string {
@ -35,6 +37,9 @@ func (d *hexdata) String() string {
} }
func (d *hexdata) MarshalJSON() ([]byte, error) { func (d *hexdata) MarshalJSON() ([]byte, error) {
if d.isNil {
return json.Marshal(nil)
}
return json.Marshal(d.String()) return json.Marshal(d.String())
} }
@ -56,11 +61,19 @@ func newHexData(input interface{}) *hexdata {
case common.Hash: case common.Hash:
d.data = input.Bytes() d.data = input.Bytes()
case *common.Hash: case *common.Hash:
d.data = input.Bytes() if input == nil {
d.isNil = true
} else {
d.data = input.Bytes()
}
case common.Address: case common.Address:
d.data = input.Bytes() d.data = input.Bytes()
// case *common.Address: case *common.Address:
// d.data = input.Bytes() if input == nil {
d.isNil = true
} else {
d.data = input.Bytes()
}
case *big.Int: case *big.Int:
d.data = input.Bytes() d.data = input.Bytes()
case int64: case int64:
@ -83,7 +96,8 @@ func newHexData(input interface{}) *hexdata {
} }
type hexnum struct { type hexnum struct {
data []byte data []byte
isNil bool
} }
func (d *hexnum) String() string { func (d *hexnum) String() string {
@ -99,6 +113,9 @@ func (d *hexnum) String() string {
} }
func (d *hexnum) MarshalJSON() ([]byte, error) { func (d *hexnum) MarshalJSON() ([]byte, error) {
if d.isNil {
return json.Marshal(nil)
}
return json.Marshal(d.String()) return json.Marshal(d.String())
} }

Loading…
Cancel
Save