Better nil handling

This commit is contained in:
Taylor Gerring 2015-04-02 11:32:50 +02:00
parent 5d8be9c30d
commit c71ca1a089

View File

@ -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())
} }