...
1
16
17 package defaulting
18
19 import structuralschema "k8s.io/apiextensions-apiserver/pkg/apiserver/schema"
20
21 func isNonNullableNonDefaultableNull(x interface{}, s *structuralschema.Structural) bool {
22 return x == nil && s != nil && s.Generic.Nullable == false && s.Default.Object == nil
23 }
24
25 func getSchemaForField(field string, s *structuralschema.Structural) *structuralschema.Structural {
26 if s == nil {
27 return nil
28 }
29 schema, ok := s.Properties[field]
30 if ok {
31 return &schema
32 }
33 if s.AdditionalProperties != nil {
34 return s.AdditionalProperties.Structural
35 }
36 return nil
37 }
38
39
40
41
42
43
44 func PruneNonNullableNullsWithoutDefaults(x interface{}, s *structuralschema.Structural) {
45 switch x := x.(type) {
46 case map[string]interface{}:
47 for k, v := range x {
48 schema := getSchemaForField(k, s)
49 if isNonNullableNonDefaultableNull(v, schema) {
50 delete(x, k)
51 } else {
52 PruneNonNullableNullsWithoutDefaults(v, schema)
53 }
54 }
55 case []interface{}:
56 var schema *structuralschema.Structural
57 if s != nil {
58 schema = s.Items
59 }
60 for i := range x {
61 PruneNonNullableNullsWithoutDefaults(x[i], schema)
62 }
63 default:
64
65 }
66 }
67
View as plain text