MCPcopy Create free account
hub / github.com/DNAProject/DNA / parseReturnNeoValueArray

Function parseReturnNeoValueArray

cmd/utils/params.go:279–323  ·  view source on GitHub ↗
(rawValues []interface{}, returnTypes []interface{})

Source from the content-addressed store, hash-verified

277}
278
279func parseReturnNeoValueArray(rawValues []interface{}, returnTypes []interface{}) ([]interface{}, error) {
280 values := make([]interface{}, 0)
281 for i := 0; i < len(rawValues); i++ {
282 rawValue := rawValues[i]
283 if i == len(returnTypes) {
284 return values, nil
285 }
286 valueType := returnTypes[i]
287
288 var err error
289 switch v := rawValue.(type) {
290 case string:
291 var value interface{}
292 vType := valueType.(string)
293 switch strings.ToLower(vType) {
294 case PARAM_TYPE_BYTE_ARRAY:
295 value, err = ParseNeoVMContractReturnTypeByteArray(v)
296 case PARAM_TYPE_STRING:
297 value, err = ParseNeoVMContractReturnTypeString(v)
298 case PARAM_TYPE_INTEGER:
299 value, err = ParseNeoVMContractReturnTypeInteger(v)
300 case PARAM_TYPE_BOOLEAN:
301 value, err = ParseNeoVMContractReturnTypeBool(v)
302 default:
303 return nil, fmt.Errorf("unknown return type:%s", v)
304 }
305 values = append(values, value)
306 if err != nil {
307 return nil, fmt.Errorf("parse return value:%s type:byte array error:%s", v, err)
308 }
309 case []interface{}:
310 valueTypes, ok := valueType.([]interface{})
311 if !ok {
312 return nil, fmt.Errorf("parse return value:%+v types:%s failed, types doesnot match", v, valueType)
313 }
314 values, err := parseReturnNeoValueArray(v, valueTypes)
315 if err != nil {
316 return nil, fmt.Errorf("parese return values:%+v types:%s error:%s", values, valueType, err)
317 }
318 default:
319 return nil, fmt.Errorf("unknown return type:%s", reflect.TypeOf(rawValue))
320 }
321 }
322 return values, nil
323}
324
325//NeoVMInvokeParam use to express the param to invoke neovm contract.
326//Type can be of array, bytearray, string, int and bool

Callers 1

ParseReturnValueFunction · 0.85

Tested by

no test coverage detected