Skip to content
Closed
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
22 changes: 18 additions & 4 deletions pkg/codegen/codegen.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,10 @@ var templates embed.FS
// globalState stores all global state. Please don't put global state anywhere
// else so that we can easily track it.
var globalState struct {
options Configuration
spec *openapi3.T
importMapping importMap
options Configuration
spec *openapi3.T
importMapping importMap
toCamelCaseFunc func(string) string
}

// goImport represents a go package to be imported in the generated code
Expand Down Expand Up @@ -104,6 +105,11 @@ func Generate(spec *openapi3.T, opts Configuration) (string, error) {
globalState.options = opts
globalState.spec = spec
globalState.importMapping = constructImportMapping(opts.ImportMapping)
globalState.toCamelCaseFunc = ToCamelCase

if opts.OutputOptions.InitialismOverrides {
globalState.toCamelCaseFunc = ToCamelCaseWithInitialism
}

filterOperationsByTag(spec, opts)
if !opts.OutputOptions.SkipPrune {
Expand Down Expand Up @@ -144,7 +150,7 @@ func Generate(spec *openapi3.T, opts Configuration) (string, error) {
}
}

ops, err := OperationDefinitions(spec, opts.OutputOptions.InitialismOverrides)
ops, err := OperationDefinitions(spec)
if err != nil {
return "", fmt.Errorf("error creating operation definitions: %w", err)
}
Expand Down Expand Up @@ -1090,3 +1096,11 @@ func GetParametersImports(params map[string]*openapi3.ParameterRef) (map[string]
}
return res, nil
}

func SetGlobalStateSpec(spec *openapi3.T) {
globalState.spec = spec
}

func ConfiguredToCamelCase(s string) string {
return globalState.toCamelCaseFunc(s)
}
19 changes: 6 additions & 13 deletions pkg/codegen/operations.go
Original file line number Diff line number Diff line change
Expand Up @@ -509,16 +509,9 @@ func FilterParameterDefinitionByType(params []ParameterDefinition, in string) []
}

// OperationDefinitions returns all operations for a swagger definition.
func OperationDefinitions(swagger *openapi3.T, initialismOverrides bool) ([]OperationDefinition, error) {
func OperationDefinitions(swagger *openapi3.T) ([]OperationDefinition, error) {
var operations []OperationDefinition

var toCamelCaseFunc func(string) string
if initialismOverrides {
toCamelCaseFunc = ToCamelCaseWithInitialism
} else {
toCamelCaseFunc = ToCamelCase
}

for _, requestPath := range SortedPathsKeys(swagger.Paths) {
pathItem := swagger.Paths[requestPath]
// These are parameters defined for all methods on a given path. They
Expand All @@ -538,13 +531,13 @@ func OperationDefinitions(swagger *openapi3.T, initialismOverrides bool) ([]Oper
}
// We rely on OperationID to generate function names, it's required
if op.OperationID == "" {
op.OperationID, err = generateDefaultOperationID(opName, requestPath, toCamelCaseFunc)
op.OperationID, err = generateDefaultOperationID(opName, requestPath)
if err != nil {
return nil, fmt.Errorf("error generating default OperationID for %s/%s: %s",
opName, requestPath, err)
}
} else {
op.OperationID = toCamelCaseFunc(op.OperationID)
op.OperationID = ConfiguredToCamelCase(op.OperationID)
}
op.OperationID = typeNamePrefix(op.OperationID) + op.OperationID

Expand Down Expand Up @@ -583,7 +576,7 @@ func OperationDefinitions(swagger *openapi3.T, initialismOverrides bool) ([]Oper
HeaderParams: FilterParameterDefinitionByType(allParams, "header"),
QueryParams: FilterParameterDefinitionByType(allParams, "query"),
CookieParams: FilterParameterDefinitionByType(allParams, "cookie"),
OperationId: toCamelCaseFunc(op.OperationID),
OperationId: ConfiguredToCamelCase(op.OperationID),
// Replace newlines in summary.
Summary: op.Summary,
Method: opName,
Expand Down Expand Up @@ -621,7 +614,7 @@ func OperationDefinitions(swagger *openapi3.T, initialismOverrides bool) ([]Oper
return operations, nil
}

func generateDefaultOperationID(opName string, requestPath string, toCamelCaseFunc func(string) string) (string, error) {
func generateDefaultOperationID(opName string, requestPath string) (string, error) {
var operationId = strings.ToLower(opName)

if opName == "" {
Expand All @@ -638,7 +631,7 @@ func generateDefaultOperationID(opName string, requestPath string, toCamelCaseFu
}
}

return toCamelCaseFunc(operationId), nil
return ConfiguredToCamelCase(operationId), nil
}

// GenerateBodyDefinitions turns the Swagger body definitions into a list of our body
Expand Down
2 changes: 1 addition & 1 deletion pkg/codegen/operations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ func TestGenerateDefaultOperationID(t *testing.T) {
}

for _, test := range suite {
got, err := generateDefaultOperationID(test.op, test.path, ToCamelCase)
got, err := generateDefaultOperationID(test.op, test.path)
if err != nil {
if !test.wantErr {
t.Fatalf("did not expected error but got %v", err)
Expand Down
4 changes: 2 additions & 2 deletions pkg/codegen/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -682,7 +682,7 @@ func typeNamePrefix(name string) (prefix string) {
// SchemaNameToTypeName converts a Schema name to a valid Go type name. It converts to camel case, and makes sure the name is
// valid in Go
func SchemaNameToTypeName(name string) string {
return typeNamePrefix(name) + ToCamelCase(name)
return typeNamePrefix(name) + ConfiguredToCamelCase(name)
}

// According to the spec, additionalProperties may be true, false, or a
Expand All @@ -706,7 +706,7 @@ func SchemaHasAdditionalProperties(schema *openapi3.Schema) bool {
// type name.
func PathToTypeName(path []string) string {
for i, p := range path {
path[i] = ToCamelCase(p)
path[i] = ConfiguredToCamelCase(p)
}
return strings.Join(path, "_")
}
Expand Down