@@ -125,29 +125,38 @@ func infoToSchema(ctx *schemaContext) *apiext.JSONSchemaProps {
125
125
return typeToSchema (ctx , ctx .info .RawSpec .Type )
126
126
}
127
127
128
+ type schemaMarkerWithName struct {
129
+ SchemaMarker SchemaMarker
130
+ Name string
131
+ }
132
+
128
133
// applyMarkers applies schema markers given their priority to the given schema
129
134
func applyMarkers (ctx * schemaContext , markerSet markers.MarkerValues , props * apiext.JSONSchemaProps , node ast.Node ) {
130
- markers := make ([]SchemaMarker , 0 , len (markerSet ))
131
- itemsMarkers := make ([]SchemaMarker , 0 , len (markerSet ))
132
- itemsMarkerNames := make (map [SchemaMarker ]string )
135
+ markers := make ([]schemaMarkerWithName , 0 , len (markerSet ))
136
+ itemsMarkers := make ([]schemaMarkerWithName , 0 , len (markerSet ))
133
137
134
138
for markerName , markerValues := range markerSet {
135
139
for _ , markerValue := range markerValues {
136
140
if schemaMarker , isSchemaMarker := markerValue .(SchemaMarker ); isSchemaMarker {
137
141
if strings .HasPrefix (markerName , crdmarkers .ValidationItemsPrefix ) {
138
- itemsMarkers = append (itemsMarkers , schemaMarker )
139
- itemsMarkerNames [schemaMarker ] = markerName
142
+ itemsMarkers = append (itemsMarkers , schemaMarkerWithName {
143
+ SchemaMarker : schemaMarker ,
144
+ Name : markerName ,
145
+ })
140
146
} else {
141
- markers = append (markers , schemaMarker )
147
+ markers = append (markers , schemaMarkerWithName {
148
+ SchemaMarker : schemaMarker ,
149
+ Name : markerName ,
150
+ })
142
151
}
143
152
}
144
153
}
145
154
}
146
155
147
- cmpPriority := func (markers []SchemaMarker , i , j int ) bool {
156
+ cmpPriority := func (markers []schemaMarkerWithName , i , j int ) bool {
148
157
var iPriority , jPriority crdmarkers.ApplyPriority
149
158
150
- switch m := markers [i ].(type ) {
159
+ switch m := markers [i ].SchemaMarker . (type ) {
151
160
case crdmarkers.ApplyPriorityMarker :
152
161
iPriority = m .ApplyPriority ()
153
162
case applyFirstMarker :
@@ -156,7 +165,7 @@ func applyMarkers(ctx *schemaContext, markerSet markers.MarkerValues, props *api
156
165
iPriority = crdmarkers .ApplyPriorityDefault
157
166
}
158
167
159
- switch m := markers [j ].(type ) {
168
+ switch m := markers [j ].SchemaMarker . (type ) {
160
169
case crdmarkers.ApplyPriorityMarker :
161
170
jPriority = m .ApplyPriority ()
162
171
case applyFirstMarker :
@@ -171,18 +180,18 @@ func applyMarkers(ctx *schemaContext, markerSet markers.MarkerValues, props *api
171
180
sort .Slice (itemsMarkers , func (i , j int ) bool { return cmpPriority (itemsMarkers , i , j ) })
172
181
173
182
for _ , schemaMarker := range markers {
174
- if err := schemaMarker .ApplyToSchema (props ); err != nil {
183
+ if err := schemaMarker .SchemaMarker . ApplyToSchema (props ); err != nil {
175
184
ctx .pkg .AddError (loader .ErrFromNode (err /* an okay guess */ , node ))
176
185
}
177
186
}
178
187
179
188
for _ , schemaMarker := range itemsMarkers {
180
189
if props .Type != "array" || props .Items == nil || props .Items .Schema == nil {
181
- err := fmt .Errorf ("must apply %s to an array value, found %s" , itemsMarkerNames [ schemaMarker ] , props .Type )
190
+ err := fmt .Errorf ("must apply %s to an array value, found %s" , schemaMarker . Name , props .Type )
182
191
ctx .pkg .AddError (loader .ErrFromNode (err , node ))
183
192
} else {
184
193
itemsSchema := props .Items .Schema
185
- if err := schemaMarker .ApplyToSchema (itemsSchema ); err != nil {
194
+ if err := schemaMarker .SchemaMarker . ApplyToSchema (itemsSchema ); err != nil {
186
195
ctx .pkg .AddError (loader .ErrFromNode (err /* an okay guess */ , node ))
187
196
}
188
197
}
0 commit comments