From b5fa6dcb1d857aa2d5b739f201ac89af573c6db2 Mon Sep 17 00:00:00 2001 From: Akash Kumar Date: Sat, 1 Mar 2025 01:40:42 +0530 Subject: [PATCH] feat: add enum support in marker type Signed-off-by: Akash Kumar --- pkg/simpleschema/markers.go | 4 +++- pkg/simpleschema/transform.go | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/simpleschema/markers.go b/pkg/simpleschema/markers.go index 9eaf3dd05..f9ef7dd9d 100644 --- a/pkg/simpleschema/markers.go +++ b/pkg/simpleschema/markers.go @@ -46,11 +46,13 @@ const ( MarkerTypeDefault MarkerType = "default" // MarkerTypeDescription represents the `description` marker. MarkerTypeDescription MarkerType = "description" + // MarkerTypeEnumeration represents the `enum` marker. + MarkerTypeEnumeration MarkerType = "enum" ) func markerTypeFromString(s string) (MarkerType, error) { switch MarkerType(s) { - case MarkerTypeRequired, MarkerTypeDefault, MarkerTypeDescription: + case MarkerTypeRequired, MarkerTypeDefault, MarkerTypeDescription, MarkerTypeEnumeration: return MarkerType(s), nil default: return "", fmt.Errorf("unknown marker type: %s", s) diff --git a/pkg/simpleschema/transform.go b/pkg/simpleschema/transform.go index df12c5876..a5d39f8c7 100644 --- a/pkg/simpleschema/transform.go +++ b/pkg/simpleschema/transform.go @@ -15,6 +15,7 @@ package simpleschema import ( "fmt" + "strings" extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" ) @@ -203,6 +204,23 @@ func (tf *transformer) applyMarkers(schema *extv1.JSONSchemaProps, markers []*Ma schema.Default = &extv1.JSON{Raw: defaultValue} case MarkerTypeDescription: schema.Description = marker.Value + case MarkerTypeEnumeration: + enumValues := strings.Split(marker.Value, ",") + enumJSON := make([]extv1.JSON, 0, len(enumValues)) + for _, v := range enumValues { + v = strings.TrimSpace(v) + var enumVal []byte + switch schema.Type { + case "string": + enumVal = []byte(fmt.Sprintf("\"%s\"", v)) + case "integer", "number": + enumVal = []byte(v) + default: + enumVal = []byte(v) + } + enumJSON = append(enumJSON, extv1.JSON{Raw: enumVal}) + } + schema.Enum = enumJSON } } }