in operationsbus/operation_request.go [84:120]
func (opRequest *OperationRequest) SetExtension(newValue interface{}) error {
newType := reflect.TypeOf(newValue)
if newType == nil {
return errors.New("new value is nil")
}
// Create a new instance of the type
newInstance := reflect.New(newType).Elem()
if opRequest.Extension != nil {
oldValue := reflect.ValueOf(opRequest.Extension)
if oldValue.Kind() == reflect.Ptr {
oldValue = oldValue.Elem()
}
if oldValue.Type().AssignableTo(newType) {
newInstance.Set(oldValue)
} else {
// Handle conversion based on known types or provide a custom conversion
data, err := json.Marshal(opRequest.Extension)
if err != nil {
return err
}
if err := json.Unmarshal(data, newInstance.Addr().Interface()); err != nil {
return err
}
}
} else {
// Initialize with zero values if Extension is nil
newInstance.Set(reflect.Zero(newType))
}
// opRequest.ExtensionType = newType
opRequest.Extension = newInstance.Interface()
return nil
}