forked from TrueCloudLab/neoneo-go
smartcontract: provide NewParametersFromValues for convenience as well
This commit is contained in:
parent
92a931c145
commit
55164132df
2 changed files with 34 additions and 7 deletions
|
@ -333,14 +333,10 @@ func NewParameterFromValue(value interface{}) (Parameter, error) {
|
||||||
result.Type = ArrayType
|
result.Type = ArrayType
|
||||||
result.Value = arr
|
result.Value = arr
|
||||||
case []interface{}:
|
case []interface{}:
|
||||||
arr := make([]Parameter, 0, len(v))
|
arr, err := NewParametersFromValues(v...)
|
||||||
for i := range v {
|
|
||||||
elem, err := NewParameterFromValue(v[i])
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
arr = append(arr, elem)
|
|
||||||
}
|
|
||||||
result.Type = ArrayType
|
result.Type = ArrayType
|
||||||
result.Value = arr
|
result.Value = arr
|
||||||
default:
|
default:
|
||||||
|
@ -350,6 +346,20 @@ func NewParameterFromValue(value interface{}) (Parameter, error) {
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewParametersFromValues is similar to NewParameterFromValue except that it
|
||||||
|
// works with multiple values and returns a simple slice of Parameter.
|
||||||
|
func NewParametersFromValues(values ...interface{}) ([]Parameter, error) {
|
||||||
|
res := make([]Parameter, 0, len(values))
|
||||||
|
for i := range values {
|
||||||
|
elem, err := NewParameterFromValue(values[i])
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res = append(res, elem)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
// ExpandParameterToEmitable converts a parameter to a type which can be handled as
|
// ExpandParameterToEmitable converts a parameter to a type which can be handled as
|
||||||
// an array item by emit.Array. It correlates with the way an RPC server handles
|
// an array item by emit.Array. It correlates with the way an RPC server handles
|
||||||
// FuncParams for invoke* calls inside the request.ExpandArrayIntoScript function.
|
// FuncParams for invoke* calls inside the request.ExpandArrayIntoScript function.
|
||||||
|
|
|
@ -692,3 +692,20 @@ func TestParameterFromValue(t *testing.T) {
|
||||||
_, err = NewParameterFromValue([]interface{}{1, 2, make(map[string]int)})
|
_, err = NewParameterFromValue([]interface{}{1, 2, make(map[string]int)})
|
||||||
require.Error(t, err)
|
require.Error(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestParametersFromValues(t *testing.T) {
|
||||||
|
res, err := NewParametersFromValues(42, "some", []byte{3, 2, 1})
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.Equal(t, []Parameter{{
|
||||||
|
Type: IntegerType,
|
||||||
|
Value: big.NewInt(42),
|
||||||
|
}, {
|
||||||
|
Type: StringType,
|
||||||
|
Value: "some",
|
||||||
|
}, {
|
||||||
|
Type: ByteArrayType,
|
||||||
|
Value: []byte{3, 2, 1},
|
||||||
|
}}, res)
|
||||||
|
_, err = NewParametersFromValues(42, make(map[int]int), []byte{3, 2, 1})
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue