aboutsummaryrefslogtreecommitdiffstats
path: root/common/hexutil/hexutil.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2017-06-23 16:50:49 +0800
committerFelix Lange <fjl@twurst.com>2017-06-27 19:15:12 +0800
commit4a741df757cf6b1d1b4c0e8c875c34b650f46167 (patch)
tree057d995a3847f9f983a4dcdf41cf3bc9fb9b82a2 /common/hexutil/hexutil.go
parentb664bedcf21f30b54af542e0b4ba4e24c01968fd (diff)
downloaddexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar.gz
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar.bz2
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar.lz
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar.xz
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.tar.zst
dexon-4a741df757cf6b1d1b4c0e8c875c34b650f46167.zip
common/hexutil: wrap errors in json.UnmarshalTypeError
This adds type and struct field context to error messages. Instead of "hex string of odd length" users will now see "json: cannot unmarshal hex string of odd length into Go struct field SendTxArgs.from of type common.Address".
Diffstat (limited to 'common/hexutil/hexutil.go')
-rw-r--r--common/hexutil/hexutil.go25
1 files changed, 15 insertions, 10 deletions
diff --git a/common/hexutil/hexutil.go b/common/hexutil/hexutil.go
index 6b128ae36..582a67c22 100644
--- a/common/hexutil/hexutil.go
+++ b/common/hexutil/hexutil.go
@@ -32,7 +32,6 @@ package hexutil
import (
"encoding/hex"
- "errors"
"fmt"
"math/big"
"strconv"
@@ -41,17 +40,23 @@ import (
const uintBits = 32 << (uint64(^uint(0)) >> 63)
var (
- ErrEmptyString = errors.New("empty hex string")
- ErrMissingPrefix = errors.New("missing 0x prefix for hex data")
- ErrSyntax = errors.New("invalid hex")
- ErrEmptyNumber = errors.New("hex number has no digits after 0x")
- ErrLeadingZero = errors.New("hex number has leading zero digits after 0x")
- ErrOddLength = errors.New("hex string has odd length")
- ErrUint64Range = errors.New("hex number does not fit into 64 bits")
- ErrUintRange = fmt.Errorf("hex number does not fit into %d bits", uintBits)
- ErrBig256Range = errors.New("hex number does not fit into 256 bits")
+ ErrEmptyString = &decError{"empty hex string"}
+ ErrSyntax = &decError{"invalid hex string"}
+ ErrMissingPrefix = &decError{"hex string without 0x prefix"}
+ ErrOddLength = &decError{"hex string of odd length"}
+ ErrEmptyNumber = &decError{"hex string \"0x\""}
+ ErrLeadingZero = &decError{"hex number with leading zero digits"}
+ ErrUint64Range = &decError{"hex number > 64 bits"}
+ ErrUintRange = &decError{fmt.Sprintf("hex number > %d bits", uintBits)}
+ ErrBig256Range = &decError{"hex number > 256 bits"}
)
+type decError struct{ msg string }
+
+func (err decError) Error() string {
+ return string(err.msg)
+}
+
// Decode decodes a hex string with 0x prefix.
func Decode(input string) ([]byte, error) {
if len(input) == 0 {