Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -434,6 +434,7 @@ const (
readOnlyTag = "readonly"
extensionsTag = "extensions"
collectionFormatTag = "collectionFormat"
explodeTag = "explode"
patternTag = "pattern"
oneOfTag = "oneOf"
)
Expand All @@ -457,6 +458,8 @@ var regexAttributes = map[string]*regexp.Regexp{
extensionsTag: regexp.MustCompile(`(?i)\s+extensions\(.*\)`),
// for collectionFormat(csv)
collectionFormatTag: regexp.MustCompile(`(?i)\s+collectionFormat\(.*\)`),
// for explode(true) or explode(false)
explodeTag: regexp.MustCompile(`(?i)\s+explode\(.*\)`),
// example(0)
exampleTag: regexp.MustCompile(`(?i)\s+example\(.*\)`),
// schemaExample(0)
Expand Down
14 changes: 14 additions & 0 deletions operationv3.go
Original file line number Diff line number Diff line change
Expand Up @@ -561,6 +561,8 @@ func (o *OperationV3) parseParamAttribute(comment, objectType, schemaType string
param.Schema.Spec.Extensions = setExtensionParam(attr)
case collectionFormatTag:
err = setCollectionFormatParamV3(param, attrKey, objectType, attr, comment)
case explodeTag:
err = setExplodeParamV3(param, attr, comment)
}

if err != nil {
Expand Down Expand Up @@ -616,6 +618,18 @@ func setCollectionFormatParamV3(param *spec.Parameter, name, schemaType, attr, c
return fmt.Errorf("%s is attribute to set to an array. comment=%s got=%s", name, commentLine, schemaType)
}

func setExplodeParamV3(param *spec.Parameter, attr, commentLine string) error {
switch strings.ToLower(attr) {
case "true":
param.Explode = true
case "false":
param.Explode = false
default:
return fmt.Errorf("explode must be 'true' or 'false', got '%s' in comment: %s", attr, commentLine)
}
return nil
}

func setSchemaExampleV3(param *spec.Schema, schemaType string, value string) error {
val, err := defineType(schemaType, value)
if err != nil {
Expand Down
44 changes: 44 additions & 0 deletions operationv3_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1029,6 +1029,50 @@ func TestParseParamCommentQueryArrayFormatV3(t *testing.T) {

}

func TestParseParamCommentExplodeV3(t *testing.T) {
t.Parallel()

t.Run("explode true", func(t *testing.T) {
comment := `@Param ids query []string true "ID List" explode(true)`
operation := NewOperationV3(New())
err := operation.ParseComment(comment, nil)
assert.NoError(t, err)

parameters := operation.Operation.Parameters
assert.NotNil(t, parameters)

parameterSpec := parameters[0].Spec.Spec
assert.NotNil(t, parameterSpec)
assert.Equal(t, "ids", parameterSpec.Name)
assert.Equal(t, "query", parameterSpec.In)
assert.Equal(t, true, parameterSpec.Explode)
})

t.Run("explode false", func(t *testing.T) {
comment := `@Param ids query []string true "ID List" explode(false)`
operation := NewOperationV3(New())
err := operation.ParseComment(comment, nil)
assert.NoError(t, err)

parameters := operation.Operation.Parameters
assert.NotNil(t, parameters)

parameterSpec := parameters[0].Spec.Spec
assert.NotNil(t, parameterSpec)
assert.Equal(t, "ids", parameterSpec.Name)
assert.Equal(t, "query", parameterSpec.In)
assert.Equal(t, false, parameterSpec.Explode)
})

t.Run("explode invalid value", func(t *testing.T) {
comment := `@Param ids query []string true "ID List" explode(invalid)`
operation := NewOperationV3(New())
err := operation.ParseComment(comment, nil)
assert.Error(t, err)
assert.Contains(t, err.Error(), "explode must be 'true' or 'false'")
})
}

func TestParseParamCommentByIDV3(t *testing.T) {
t.Parallel()

Expand Down