aboutsummaryrefslogtreecommitdiffstats
path: root/rpc/args.go
diff options
context:
space:
mode:
authorTaylor Gerring <taylor.gerring@gmail.com>2015-03-23 23:04:21 +0800
committerTaylor Gerring <taylor.gerring@gmail.com>2015-03-23 23:04:21 +0800
commit3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa (patch)
tree6da97d39c03b125d4824c570bede3fb445c756a0 /rpc/args.go
parentdbb2af6016c952b0f49d552a10fc59af0a9f7ce7 (diff)
downloadgo-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar.gz
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar.bz2
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar.lz
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar.xz
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.tar.zst
go-tangerine-3f6e1b2fd3cbc6aeb1bbe658dd5b70945a57dffa.zip
db_putHex/db_getHex + tests
Diffstat (limited to 'rpc/args.go')
-rw-r--r--rpc/args.go78
1 files changed, 72 insertions, 6 deletions
diff --git a/rpc/args.go b/rpc/args.go
index 504e67c07..06dab99bc 100644
--- a/rpc/args.go
+++ b/rpc/args.go
@@ -497,24 +497,39 @@ func (args *BlockFilterArgs) UnmarshalJSON(b []byte) (err error) {
type DbArgs struct {
Database string
Key string
- Value string
+ Value []byte
}
func (args *DbArgs) UnmarshalJSON(b []byte) (err error) {
var obj []interface{}
- r := bytes.NewReader(b)
- if err := json.NewDecoder(r).Decode(&obj); err != nil {
+ if err := json.Unmarshal(b, &obj); err != nil {
return NewDecodeParamError(err.Error())
}
if len(obj) < 2 {
return NewInsufficientParamsError(len(obj), 2)
}
- args.Database = obj[0].(string)
- args.Key = obj[1].(string)
+
+ var objstr string
+ var ok bool
+
+ if objstr, ok = obj[0].(string); !ok {
+ return NewDecodeParamError("Database is not a string")
+ }
+ args.Database = objstr
+
+ if objstr, ok = obj[1].(string); !ok {
+ return NewDecodeParamError("Key is not a string")
+ }
+ args.Key = objstr
if len(obj) > 2 {
- args.Value = obj[2].(string)
+ objstr, ok = obj[2].(string)
+ if !ok {
+ return NewDecodeParamError("Value is not a string")
+ }
+
+ args.Value = []byte(objstr)
}
return nil
@@ -530,6 +545,57 @@ func (a *DbArgs) requirements() error {
return nil
}
+type DbHexArgs struct {
+ Database string
+ Key string
+ Value []byte
+}
+
+func (args *DbHexArgs) UnmarshalJSON(b []byte) (err error) {
+ var obj []interface{}
+ if err := json.Unmarshal(b, &obj); err != nil {
+ return NewDecodeParamError(err.Error())
+ }
+
+ if len(obj) < 2 {
+ return NewInsufficientParamsError(len(obj), 2)
+ }
+
+ var objstr string
+ var ok bool
+
+ if objstr, ok = obj[0].(string); !ok {
+ return NewDecodeParamError("Database is not a string")
+ }
+ args.Database = objstr
+
+ if objstr, ok = obj[1].(string); !ok {
+ return NewDecodeParamError("Key is not a string")
+ }
+ args.Key = objstr
+
+ if len(obj) > 2 {
+ objstr, ok = obj[2].(string)
+ if !ok {
+ return NewDecodeParamError("Value is not a string")
+ }
+
+ args.Value = common.FromHex(objstr)
+ }
+
+ return nil
+}
+
+func (a *DbHexArgs) requirements() error {
+ if len(a.Database) == 0 {
+ return NewValidationError("Database", "cannot be blank")
+ }
+ if len(a.Key) == 0 {
+ return NewValidationError("Key", "cannot be blank")
+ }
+ return nil
+}
+
type WhisperMessageArgs struct {
Payload string
To string