package common import ( "encoding/hex" "fmt" "strings" ) func NewBinaryHex(data []byte) BinaryHex { var result BinaryHex = data return result } type BinaryHex []byte func (bh BinaryHex) Bytes() []byte { return []byte(bh) } func (bh *BinaryHex) SetBytes(value []byte) { v := BinaryHex(value) *bh = v } func (bh BinaryHex) String() string { return hex.EncodeToString(bh) } // TODO Hack to render []byte as int array for the JSON RPC. Otherwise Go renders in base64 func (bh BinaryHex) UintArray() []uint { bytes := bh.Bytes() result := make([]uint, len(bytes)) for i, d := range bytes { result[i] = uint(d) } return result } func (bh *BinaryHex) SetHex(data string) error { x, err := hex.DecodeString(strings.Trim(string(data), `"`)) if err != nil { return err } *bh = x return nil } func (bh BinaryHex) MarshalJSON() ([]byte, error) { return []byte(fmt.Sprintf(`"%s"`, bh.String())), nil } func (bh *BinaryHex) UnmarshalJSON(data []byte) error { return bh.SetHex(string(data)) }