diff --git a/pkg/runtime/converter.go b/pkg/runtime/converter.go index 871e4c8c4..4a6cc6857 100644 --- a/pkg/runtime/converter.go +++ b/pkg/runtime/converter.go @@ -186,6 +186,9 @@ func fromUnstructured(sv, dv reflect.Value) error { reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: dv.Set(sv.Convert(dt)) return nil + case reflect.Float32, reflect.Float64: + dv.Set(sv.Convert(dt)) + return nil } case reflect.Float32, reflect.Float64: switch dt.Kind() { diff --git a/pkg/runtime/converter_test.go b/pkg/runtime/converter_test.go index 0e0ccfc9a..224b2838b 100644 --- a/pkg/runtime/converter_test.go +++ b/pkg/runtime/converter_test.go @@ -544,6 +544,28 @@ func TestFloatIntConversion(t *testing.T) { } } +func TestIntFloatConversion(t *testing.T) { + unstr := map[string]interface{}{"ch": int64(3)} + + var obj C + if err := runtime.NewTestUnstructuredConverter(simpleEquality).FromUnstructured(unstr, &obj); err != nil { + t.Errorf("Unexpected error in FromUnstructured: %v", err) + } + + data, err := json.Marshal(unstr) + if err != nil { + t.Fatalf("Error when marshaling unstructured: %v", err) + } + var unmarshalled C + if err := json.Unmarshal(data, &unmarshalled); err != nil { + t.Fatalf("Error when unmarshaling to object: %v", err) + } + + if !reflect.DeepEqual(obj, unmarshalled) { + t.Errorf("Incorrect conversion, diff: %v", diff.ObjectReflectDiff(obj, unmarshalled)) + } +} + func TestCustomToUnstructured(t *testing.T) { testcases := []struct { Data string