(rawValues []interface{}, returnTypes []interface{})
| 231 | } |
| 232 | |
| 233 | func parasReturnValueWasmArray(rawValues []interface{}, returnTypes []interface{}) ([]interface{}, error) { |
| 234 | values := make([]interface{}, 0) |
| 235 | for i := 0; i < len(rawValues); i++ { |
| 236 | rawValue := rawValues[i] |
| 237 | if i == len(returnTypes) { |
| 238 | return values, nil |
| 239 | } |
| 240 | valueType := returnTypes[i] |
| 241 | |
| 242 | var err error |
| 243 | switch v := rawValue.(type) { |
| 244 | case string: |
| 245 | var value interface{} |
| 246 | vType := valueType.(string) |
| 247 | switch strings.ToLower(vType) { |
| 248 | case PARAM_TYPE_BYTE_ARRAY: |
| 249 | value, err = ParseWasmVMContractReturnTypeByteArray(v) |
| 250 | case PARAM_TYPE_STRING: |
| 251 | value, err = ParseWasmVMContractReturnTypeString(v) |
| 252 | case PARAM_TYPE_INTEGER: |
| 253 | value, err = ParseWasmVMContractReturnTypeInteger(v) |
| 254 | case PARAM_TYPE_BOOLEAN: |
| 255 | value, err = ParseWasmVMContractReturnTypeBool(v) |
| 256 | default: |
| 257 | return nil, fmt.Errorf("unknown return type:%s", v) |
| 258 | } |
| 259 | values = append(values, value) |
| 260 | if err != nil { |
| 261 | return nil, fmt.Errorf("parse return value:%s type:byte array error:%s", v, err) |
| 262 | } |
| 263 | case []interface{}: |
| 264 | valueTypes, ok := valueType.([]interface{}) |
| 265 | if !ok { |
| 266 | return nil, fmt.Errorf("parse return value:%+v types:%s failed, types doesnot match", v, valueType) |
| 267 | } |
| 268 | values, err := parasReturnValueWasmArray(v, valueTypes) |
| 269 | if err != nil { |
| 270 | return nil, fmt.Errorf("parese return values:%+v types:%s error:%s", values, valueType, err) |
| 271 | } |
| 272 | default: |
| 273 | return nil, fmt.Errorf("unknown return type:%s", reflect.TypeOf(rawValue)) |
| 274 | } |
| 275 | } |
| 276 | return values, nil |
| 277 | } |
| 278 | |
| 279 | func parseReturnNeoValueArray(rawValues []interface{}, returnTypes []interface{}) ([]interface{}, error) { |
| 280 | values := make([]interface{}, 0) |
no test coverage detected