diff --git a/pkg/simpleschema/markers.go b/pkg/simpleschema/markers.go index d422b48d1..c13f71fd1 100644 --- a/pkg/simpleschema/markers.go +++ b/pkg/simpleschema/markers.go @@ -50,12 +50,14 @@ const ( MarkerTypeMinimum MarkerType = "minimum" // MarkerTypeMaximum represents the `maximum` marker. MarkerTypeMaximum MarkerType = "maximum" + // MarkerTypeValidation represents the `validation` marker. + MarkerTypeValidation MarkerType = "validation" ) func markerTypeFromString(s string) (MarkerType, error) { switch MarkerType(s) { case MarkerTypeRequired, MarkerTypeDefault, MarkerTypeDescription, - MarkerTypeMinimum, MarkerTypeMaximum: + MarkerTypeMinimum, MarkerTypeMaximum, MarkerTypeValidation: return MarkerType(s), nil default: return "", fmt.Errorf("unknown marker type: %s", s) diff --git a/pkg/simpleschema/markers_test.go b/pkg/simpleschema/markers_test.go index 0b63d26b4..e46554fec 100644 --- a/pkg/simpleschema/markers_test.go +++ b/pkg/simpleschema/markers_test.go @@ -124,6 +124,15 @@ func TestParseMarkers(t *testing.T) { }, wantErr: false, }, + { + name: "validation marker with one value", + input: "validation=\"oldself=self\" required=true", + want: []*Marker{ + {MarkerType: MarkerTypeValidation, Key: "validation", Value: "oldself=self"}, + {MarkerType: MarkerTypeRequired, Key: "required", Value: "true"}, + }, + wantErr: false, + }, } for _, tt := range tests { diff --git a/pkg/simpleschema/transform.go b/pkg/simpleschema/transform.go index 7218e76ce..ef17a2722 100644 --- a/pkg/simpleschema/transform.go +++ b/pkg/simpleschema/transform.go @@ -212,6 +212,13 @@ func (tf *transformer) applyMarkers(schema *extv1.JSONSchemaProps, markers []*Ma if val, err := strconv.ParseFloat(marker.Value, 64); err == nil { schema.Maximum = &val } + case MarkerTypeValidation: + newRule := extv1.ValidationRule{ + Rule: marker.Value, + } + if parentSchema != nil { + parentSchema.XValidations = append(parentSchema.XValidations, newRule) + } } } }