in pkg/cloud/api/check.go [26:71]
func checkPostAccess(traits *FieldTraits, v reflect.Value) error {
acc := newAcceptorFuncs()
acc.onStructF = func(p Path, v reflect.Value) (bool, error) {
if p.Equal(Path{}.Pointer().Field("ServerResponse")) {
return false, nil
}
acc, err := newMetafieldAccessor(v)
if err != nil {
return false, fmt.Errorf("checkPostAccess %v: %w", p, err)
}
for i := 0; i < v.NumField(); i++ {
ft := v.Type().Field(i)
if ft.Name == "NullFields" || ft.Name == "ForceSendFields" {
continue
}
fType := traits.FieldType(p.Field(ft.Name))
fv := v.Field(i)
fp := p.Field(ft.Name)
switch fType {
case FieldTypeSystem:
if !fv.IsZero() {
return false, fmt.Errorf("%s has a non-zero value (%v) but is a System field", fv.Interface(), fp)
}
case FieldTypeOutputOnly:
if !fv.IsZero() {
return false, fmt.Errorf("%s has a non-zero value (%v) but is an OutputOnly field", fv.Interface(), fp)
}
case FieldTypeNonZeroValue:
switch {
case fv.IsZero() && !acc.inNull(ft.Name) && !acc.inForceSend(ft.Name):
return false, fmt.Errorf("%s is zero value but not in a NullFields or ForceSendFields %v %t", fp, fv.Interface(), fv.IsZero())
case !fv.IsZero() && acc.inNull(ft.Name):
return false, fmt.Errorf("%s is non-nil and also in NullFields", fp)
}
case FieldTypeOrdinary, FieldTypeAllowZeroValue:
continue
default:
return false, fmt.Errorf("invalid FieldType: %q", fType)
}
}
return true, nil
}
return visit(v, acc)
}