(declaredType, actualType reflect.Type, serializer Serializer)
| 647 | } |
| 648 | |
| 649 | func wrapMapSerializerIfNeeded(declaredType, actualType reflect.Type, serializer Serializer) (reflect.Type, Serializer) { |
| 650 | if declaredType == nil || actualType == nil || serializer == nil { |
| 651 | return actualType, serializer |
| 652 | } |
| 653 | if declaredType.Kind() == reflect.Ptr { |
| 654 | if actualType.Kind() == reflect.Ptr { |
| 655 | return actualType, serializer |
| 656 | } |
| 657 | return reflect.PtrTo(actualType), &ptrToValueSerializer{valueSerializer: serializer} |
| 658 | } |
| 659 | if declaredType.Kind() == reflect.Interface { |
| 660 | if actualType.AssignableTo(declaredType) { |
| 661 | return actualType, serializer |
| 662 | } |
| 663 | if actualType.Kind() != reflect.Ptr { |
| 664 | ptrType := reflect.PtrTo(actualType) |
| 665 | if ptrType.AssignableTo(declaredType) { |
| 666 | return ptrType, &ptrToValueSerializer{valueSerializer: serializer} |
| 667 | } |
| 668 | } |
| 669 | } |
| 670 | return actualType, serializer |
| 671 | } |
| 672 | |
| 673 | // UnwrapReflectValue is exported for use by other packages |
| 674 | func UnwrapReflectValue(v reflect.Value) reflect.Value { |
no test coverage detected