func convert()

in internal/kernel/callbacks.go [163:197]


func convert(value reflect.Value, typ reflect.Type) reflect.Value {
retry:
	vt := value.Type()

	if vt.AssignableTo(typ) {
		return value
	}
	if value.CanConvert(typ) {
		return value.Convert(typ)
	}

	if typ.Kind() == reflect.Ptr {
		switch value.Kind() {
		case reflect.String:
			str := value.String()
			value = reflect.ValueOf(&str)
		case reflect.Bool:
			bool := value.Bool()
			value = reflect.ValueOf(&bool)
		case reflect.Int:
			int := value.Int()
			value = reflect.ValueOf(&int)
		case reflect.Float64:
			float := value.Float()
			value = reflect.ValueOf(&float)
		default:
			iface := value.Interface()
			value = reflect.ValueOf(&iface)
		}
		goto retry
	}

	// Unsure what to do... let default behavior happen...
	return value
}