mirror of https://github.com/k3s-io/k3s
More verbose error on missing field
parent
76e2cd70f7
commit
7ce23e43e7
|
@ -141,11 +141,11 @@ func (c *Converter) convert(sv, dv reflect.Value) error {
|
|||
case reflect.Struct:
|
||||
for i := 0; i < dt.NumField(); i++ {
|
||||
f := dv.Type().Field(i)
|
||||
df := dv.FieldByName(f.Name)
|
||||
sf := sv.FieldByName(f.Name)
|
||||
if !df.IsValid() || !sf.IsValid() {
|
||||
return fmt.Errorf("%v not present in source and dest.", f.Name)
|
||||
if !sf.IsValid() {
|
||||
return fmt.Errorf("%v not present in source %v for dest %v", f.Name, sv.Type(), dv.Type())
|
||||
}
|
||||
df := dv.Field(i)
|
||||
if err := c.convert(sf, df); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -79,3 +79,32 @@ func TestConverter(t *testing.T) {
|
|||
t.Errorf("unexpected non-error")
|
||||
}
|
||||
}
|
||||
|
||||
func anonymousEmptyTypeNamedA() interface{} {
|
||||
type A struct{}
|
||||
return &A{}
|
||||
}
|
||||
|
||||
func TestCopyConvertor(t *testing.T) {
|
||||
type A struct {
|
||||
Bar string
|
||||
}
|
||||
type B struct {
|
||||
Bar string
|
||||
}
|
||||
c := NewConverter()
|
||||
err := c.Convert(anonymousEmptyTypeNamedA(), &A{})
|
||||
if err == nil {
|
||||
t.Errorf("unexpected non-error")
|
||||
}
|
||||
|
||||
err = c.Convert(&A{}, anonymousEmptyTypeNamedA())
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error %v", err)
|
||||
}
|
||||
|
||||
err = c.Convert(&B{}, &A{})
|
||||
if err == nil {
|
||||
t.Errorf("unexpected non-error")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue