func()

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
}