accounts/abi: allow interface as the destination (#18490)
This commit is contained in:
		
							parent
							
								
									ad849c01d3
								
							
						
					
					
						commit
						a50b471b6b
					
				| @ -74,7 +74,7 @@ func mustArrayToByteSlice(value reflect.Value) reflect.Value { | ||||
| func set(dst, src reflect.Value) error { | ||||
| 	dstType, srcType := dst.Type(), src.Type() | ||||
| 	switch { | ||||
| 	case dstType.Kind() == reflect.Interface: | ||||
| 	case dstType.Kind() == reflect.Interface && dst.Elem().IsValid(): | ||||
| 		return set(dst.Elem(), src) | ||||
| 	case dstType.Kind() == reflect.Ptr && dstType.Elem() != derefbigT: | ||||
| 		return set(dst.Elem(), src) | ||||
|  | ||||
| @ -512,6 +512,11 @@ func TestMethodMultiReturn(t *testing.T) { | ||||
| 		Int    *big.Int | ||||
| 	} | ||||
| 
 | ||||
| 	newInterfaceSlice := func(len int) interface{} { | ||||
| 		slice := make([]interface{}, len) | ||||
| 		return &slice | ||||
| 	} | ||||
| 
 | ||||
| 	abi, data, expected := methodMultiReturn(require.New(t)) | ||||
| 	bigint := new(big.Int) | ||||
| 	var testCases = []struct { | ||||
| @ -539,6 +544,16 @@ func TestMethodMultiReturn(t *testing.T) { | ||||
| 		&[2]interface{}{&expected.Int, &expected.String}, | ||||
| 		"", | ||||
| 		"Can unpack into an array", | ||||
| 	}, { | ||||
| 		&[2]interface{}{}, | ||||
| 		&[2]interface{}{expected.Int, expected.String}, | ||||
| 		"", | ||||
| 		"Can unpack into interface array", | ||||
| 	}, { | ||||
| 		newInterfaceSlice(2), | ||||
| 		&[]interface{}{expected.Int, expected.String}, | ||||
| 		"", | ||||
| 		"Can unpack into interface slice", | ||||
| 	}, { | ||||
| 		&[]interface{}{new(int), new(int)}, | ||||
| 		&[]interface{}{&expected.Int, &expected.String}, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user