github.com/vmware/transport-go@v1.3.4/model/util.go (about) 1 // Copyright 2019-2020 VMware, Inc. 2 // SPDX-License-Identifier: BSD-2-Clause 3 4 package model 5 6 import ( 7 "encoding/json" 8 "reflect" 9 ) 10 11 func ConvertValueToType(value interface{}, targetType reflect.Type) (interface{}, error) { 12 if targetType == nil { 13 return value, nil 14 } 15 16 itemType := targetType 17 var isTargetTypePointer bool 18 19 if itemType.Kind() == reflect.Ptr { 20 isTargetTypePointer = true 21 itemType = itemType.Elem() 22 } 23 24 decodedValuePtr := reflect.New(itemType).Interface() 25 26 marshaledValue, _ := json.Marshal(value) 27 decodeErr := json.Unmarshal(marshaledValue, decodedValuePtr) 28 29 if decodeErr != nil { 30 return nil, decodeErr 31 } 32 33 if isTargetTypePointer { 34 return decodedValuePtr, nil 35 } else { 36 return reflect.ValueOf(decodedValuePtr).Elem().Interface(), nil 37 } 38 }