rpc: make parameter type an enum
Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
d2bdae99e4
commit
7331127556
3 changed files with 105 additions and 117 deletions
|
@ -1,49 +1,13 @@
|
|||
package rpc
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
)
|
||||
|
||||
type (
|
||||
// Params represents the JSON-RPC params.
|
||||
Params []Param
|
||||
)
|
||||
|
||||
// UnmarshalJSON implements the Unmarshaller
|
||||
// interface.
|
||||
func (p *Params) UnmarshalJSON(data []byte) error {
|
||||
var params []interface{}
|
||||
|
||||
err := json.Unmarshal(data, ¶ms)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for i := 0; i < len(params); i++ {
|
||||
param := Param{
|
||||
RawValue: params[i],
|
||||
}
|
||||
|
||||
switch val := params[i].(type) {
|
||||
case string:
|
||||
param.StringVal = val
|
||||
param.Type = "string"
|
||||
|
||||
case float64:
|
||||
newVal, _ := params[i].(float64)
|
||||
param.IntVal = int(newVal)
|
||||
param.Type = "number"
|
||||
}
|
||||
|
||||
*p = append(*p, param)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ValueAt returns the param struct for the given
|
||||
// Value returns the param struct for the given
|
||||
// index if it exists.
|
||||
func (p Params) ValueAt(index int) (*Param, bool) {
|
||||
func (p Params) Value(index int) (*Param, bool) {
|
||||
if len(p) > index {
|
||||
return &p[index], true
|
||||
}
|
||||
|
@ -51,33 +15,12 @@ func (p Params) ValueAt(index int) (*Param, bool) {
|
|||
return nil, false
|
||||
}
|
||||
|
||||
// ValueAtAndType returns the param struct at the given index if it
|
||||
// ValueWithType returns the param struct at the given index if it
|
||||
// exists and matches the given type.
|
||||
func (p Params) ValueAtAndType(index int, valueType string) (*Param, bool) {
|
||||
if len(p) > index && valueType == p[index].Type {
|
||||
return &p[index], true
|
||||
func (p Params) ValueWithType(index int, valType paramType) (*Param, bool) {
|
||||
if val, ok := p.Value(index); ok && val.Type == valType {
|
||||
return val, true
|
||||
}
|
||||
|
||||
return nil, false
|
||||
}
|
||||
|
||||
// Value returns the param struct for the given
|
||||
// index if it exists.
|
||||
func (p Params) Value(index int) (*Param, error) {
|
||||
if len(p) <= index {
|
||||
return nil, errInvalidParams
|
||||
}
|
||||
return &p[index], nil
|
||||
}
|
||||
|
||||
// ValueWithType returns the param struct at the given index if it
|
||||
// exists and matches the given type.
|
||||
func (p Params) ValueWithType(index int, valType string) (*Param, error) {
|
||||
val, err := p.Value(index)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else if val.Type != valType {
|
||||
return nil, errInvalidParams
|
||||
}
|
||||
return &p[index], nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue