codegen

package
v2.7.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2026 License: Apache-2.0 Imports: 34 Imported by: 28

Documentation

Overview

Copyright 2019 DeepMap, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2019 DeepMap, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2019 DeepMap, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Copyright 2019 DeepMap, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Index

Constants

This section is empty.

Variables

View Source
var DefaultTypeMapping = TypeMapping{
	Integer: FormatMapping{
		Default: SimpleTypeSpec{Type: "int"},
		Formats: map[string]SimpleTypeSpec{
			"int":    {Type: "int"},
			"int8":   {Type: "int8"},
			"int16":  {Type: "int16"},
			"int32":  {Type: "int32"},
			"int64":  {Type: "int64"},
			"uint":   {Type: "uint"},
			"uint8":  {Type: "uint8"},
			"uint16": {Type: "uint16"},
			"uint32": {Type: "uint32"},
			"uint64": {Type: "uint64"},
		},
	},
	Number: FormatMapping{
		Default: SimpleTypeSpec{Type: "float32"},
		Formats: map[string]SimpleTypeSpec{
			"float":  {Type: "float32"},
			"double": {Type: "float64"},
		},
	},
	Boolean: FormatMapping{
		Default: SimpleTypeSpec{Type: "bool"},
	},
	String: FormatMapping{
		Default: SimpleTypeSpec{Type: "string"},
		Formats: map[string]SimpleTypeSpec{
			"byte":      {Type: "[]byte"},
			"email":     {Type: "openapi_types.Email"},
			"date":      {Type: "openapi_types.Date"},
			"date-time": {Type: "time.Time", Import: "time"},
			"json":      {Type: "json.RawMessage", Import: "encoding/json"},
			"uuid":      {Type: "openapi_types.UUID"},
			"binary":    {Type: "openapi_types.File"},
		},
	},
}

DefaultTypeMapping provides the default OpenAPI type/format to Go type mappings.

NameNormalizers contains the valid options for `NameNormalizerFunction`s that `oapi-codegen` supports.

If you are calling `oapi-codegen` as a library, this allows you to specify your own normalisation types before generating code.

View Source
var TemplateFunctions = template.FuncMap{
	"genParamArgs":               genParamArgs,
	"genParamTypes":              genParamTypes,
	"genParamNames":              genParamNames,
	"genParamFmtString":          ReplacePathParamsWithStr,
	"swaggerUriToIrisUri":        SwaggerUriToIrisUri,
	"swaggerUriToEchoUri":        SwaggerUriToEchoUri,
	"swaggerUriToFiberUri":       SwaggerUriToFiberUri,
	"swaggerUriToChiUri":         SwaggerUriToChiUri,
	"swaggerUriToGinUri":         SwaggerUriToGinUri,
	"swaggerUriToGorillaUri":     SwaggerUriToGorillaUri,
	"swaggerUriToStdHttpUri":     SwaggerUriToStdHttpUri,
	"lcFirst":                    LowercaseFirstCharacter,
	"ucFirst":                    UppercaseFirstCharacter,
	"ucFirstWithPkgName":         UppercaseFirstCharacterWithPkgName,
	"camelCase":                  ToCamelCase,
	"genResponsePayload":         genResponsePayload,
	"genResponseTypeName":        genResponseTypeName,
	"genResponseUnmarshal":       genResponseUnmarshal,
	"getResponseTypeDefinitions": getResponseTypeDefinitions,
	"toStringArray":              toStringArray,
	"lower":                      strings.ToLower,
	"title":                      titleCaser.String,
	"stripNewLines":              stripNewLines,
	"sanitizeGoIdentity":         SanitizeGoIdentity,
	"schemaNameToTypeName":       SchemaNameToTypeName,
	"toGoString":                 StringToGoString,
	"toGoComment":                StringWithTypeNameToGoComment,

	"genServerURLWithVariablesFunctionParams": genServerURLWithVariablesFunctionParams,
	"httpMethodConstant":                      httpMethodConstant,
}

TemplateFunctions is passed to the template engine, and we can call each function here by keyName from the template code.

Functions

func DeprecationComment

func DeprecationComment(reason string) string

func EscapePathElements

func EscapePathElements(path string) string

EscapePathElements breaks apart a path, and looks at each element. If it's not a path parameter, eg, {param}, it will URL-escape the element.

func GenFieldsFromProperties

func GenFieldsFromProperties(props []Property) []string

GenFieldsFromProperties produce corresponding field names with JSON annotations, given a list of schema descriptors

func GenStructFromAllOf

func GenStructFromAllOf(allOf []*openapi3.SchemaRef, path []string) (string, error)

GenStructFromAllOf generates an object that is the union of the objects in the input array. In the case of Ref objects, we use an embedded struct, otherwise, we inline the fields.

func GenStructFromSchema

func GenStructFromSchema(schema Schema) string

func Generate

func Generate(spec *openapi3.T, opts Configuration) (string, error)

Generate uses the Go templating engine to generate all of our server wrappers from the descriptions we've built up above from the schema objects. opts defines

func GenerateAdditionalPropertyBoilerplate

func GenerateAdditionalPropertyBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)

GenerateAdditionalPropertyBoilerplate generates all the glue code which provides the API for interacting with additional properties and JSON-ification

func GenerateBodyDefinitions

func GenerateBodyDefinitions(operationID string, bodyOrRef *openapi3.RequestBodyRef, pathItemRef string) ([]RequestBodyDefinition, []TypeDefinition, error)

GenerateBodyDefinitions turns the Swagger body definitions into a list of our body definitions which will be used for code generation.

pathItemRef is the path item's $ref (if any). When non-empty and pointing at an external file, the body type that would otherwise be hoisted locally is replaced by a reference to the imported package's same-named type — the imported package already declares it (with any As/From/Merge methods), so redeclaring locally would just produce an awkward duplicate with package-qualified union elements.

func GenerateChiServer

func GenerateChiServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateChiServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateClient

func GenerateClient(t *template.Template, ops []OperationDefinition) (string, error)

GenerateClient uses the template engine to generate the function which registers our wrappers as Echo path handlers.

func GenerateClientWithResponses

func GenerateClientWithResponses(t *template.Template, ops []OperationDefinition) (string, error)

GenerateClientWithResponses generates a client which extends the basic client which does response unmarshaling.

func GenerateConstants

func GenerateConstants(t *template.Template, ops []OperationDefinition) (string, error)

GenerateConstants generates operation ids, context keys, paths, etc. to be exported as constants

func GenerateEcho5Server added in v2.7.0

func GenerateEcho5Server(t *template.Template, operations []OperationDefinition) (string, error)

GenerateEcho5Server generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateEchoServer

func GenerateEchoServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateEchoServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateEnums

func GenerateEnums(t *template.Template, types []TypeDefinition) (string, error)

func GenerateFiberServer

func GenerateFiberServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateFiberServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateGinServer

func GenerateGinServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateGinServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateGorillaServer

func GenerateGorillaServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateGorillaServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateImports

func GenerateImports(t *template.Template, externalImports []string, packageName string, versionOverride *string) (string, error)

GenerateImports generates our import statements and package definition.

func GenerateInlinedSpec

func GenerateInlinedSpec(t *template.Template, importMapping importMap, swagger *openapi3.T) (string, error)

GenerateInlinedSpec generates a gzipped, base64 encoded JSON representation of the swagger definition, which we embed inside the generated code.

func GenerateIrisServer

func GenerateIrisServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateIrisServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateServerURLs added in v2.5.0

func GenerateServerURLs(t *template.Template, spec *openapi3.T) (string, error)

func GenerateStdHTTPServer

func GenerateStdHTTPServer(t *template.Template, operations []OperationDefinition) (string, error)

GenerateStdHTTPServer generates all the go code for the ServerInterface as well as all the wrapper functions around our handlers.

func GenerateStrictResponses

func GenerateStrictResponses(t *template.Template, responses []ResponseDefinition) (string, error)

func GenerateStrictServer

func GenerateStrictServer(t *template.Template, operations []OperationDefinition, opts Configuration) (string, error)

func GenerateTemplates

func GenerateTemplates(templates []string, t *template.Template, ops any) (string, error)

GenerateTemplates used to generate templates

func GenerateTypeDefinitions

func GenerateTypeDefinitions(t *template.Template, swagger *openapi3.T, ops []OperationDefinition, excludeSchemas []string) (string, error)

func GenerateTypes

func GenerateTypes(t *template.Template, types []TypeDefinition) (string, error)

GenerateTypes passes a bunch of types to the template engine, and buffers its output into a string.

func GenerateTypesForOperations

func GenerateTypesForOperations(t *template.Template, ops []OperationDefinition) (string, error)

GenerateTypesForOperations generates code for all types produced within operations

func GenerateUnionAndAdditionalProopertiesBoilerplate

func GenerateUnionAndAdditionalProopertiesBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)

func GenerateUnionBoilerplate

func GenerateUnionBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)

func GetParametersImports

func GetParametersImports(params map[string]*openapi3.ParameterRef) (map[string]goImport, error)

func GetRequestBodiesImports

func GetRequestBodiesImports(bodies map[string]*openapi3.RequestBodyRef) (map[string]goImport, error)

func GetResponsesImports

func GetResponsesImports(responses map[string]*openapi3.ResponseRef) (map[string]goImport, error)

func GetSchemaImports

func GetSchemaImports(schemas map[string]*openapi3.SchemaRef, excludeSchemas []string) (map[string]goImport, error)

func GetTypeDefinitionsImports

func GetTypeDefinitionsImports(swagger *openapi3.T, excludeSchemas []string) (map[string]goImport, error)

func GetUserTemplateText

func GetUserTemplateText(inputData string) (template string, err error)

GetUserTemplateText attempts to retrieve the template text from a passed in URL or file path when inputData is more than one line. This function will attempt to load a file first, and if it fails, will try to get the data from the remote endpoint. The timeout for remote download file is 30 seconds.

func GoSchemaImports

func GoSchemaImports(schemas ...*openapi3.SchemaRef) (map[string]goImport, error)

func IsGoIdentity

func IsGoIdentity(str string) bool

IsGoIdentity checks if the given string can be used as an identity in the generated code like a type name or constant name.

See https://golang.org/ref/spec#Identifiers

func IsGoKeyword

func IsGoKeyword(str string) bool

IsGoKeyword returns whether the given string is a go keyword

func IsGoTypeReference

func IsGoTypeReference(ref string) bool

IsGoTypeReference takes a $ref value and checks if it has link to go type. #/components/schemas/Foo -> true ./local/file.yml#/components/parameters/Bar -> true ./local/file.yml -> false IsGoTypeReference can be used to check whether RefPathToGoType($ref) is possible.

func IsPredeclaredGoIdentifier

func IsPredeclaredGoIdentifier(str string) bool

IsPredeclaredGoIdentifier returns whether the given string is a predefined go identifier.

See https://golang.org/ref/spec#Predeclared_identifiers

func IsValidGoIdentity

func IsValidGoIdentity(str string) bool

IsValidGoIdentity checks if the given string can be used as a name of variable, constant, or type.

func IsWholeDocumentReference

func IsWholeDocumentReference(ref string) bool

IsWholeDocumentReference takes a $ref value and checks if it is whole document reference. #/components/schemas/Foo -> false ./local/file.yml#/components/parameters/Bar -> false ./local/file.yml -> true http://deepmap.com/schemas/document.json -> true http://deepmap.com/schemas/document.json#/Foo -> false

func LoadTemplates

func LoadTemplates(src embed.FS, t *template.Template) error

LoadTemplates loads all of our template files into a text/template. The path of template is relative to the templates directory.

func LowercaseFirstCharacter

func LowercaseFirstCharacter(str string) string

LowercaseFirstCharacter Lowercases the first character in a string. This assumes UTF-8, so we have to be careful with unicode, don't treat it as a byte array.

func LowercaseFirstCharacters

func LowercaseFirstCharacters(str string) string

Lowercase the first upper characters in a string for case of abbreviation. This assumes UTF-8, so we have to be careful with unicode, don't treat it as a byte array.

func OperationImports

func OperationImports(ops []OperationDefinition) (map[string]goImport, error)

func OperationSchemaImports

func OperationSchemaImports(s *Schema) (map[string]goImport, error)

func OrderedParamsFromUri

func OrderedParamsFromUri(uri string) []string

OrderedParamsFromUri returns the argument names, in order, in a given URI string, so for /path/{param1}/{.param2*}/{?param3}, it would return param1, param2, param3

func ParseGoImportExtension

func ParseGoImportExtension(v *openapi3.SchemaRef) (*goImport, error)

func PathToTypeName

func PathToTypeName(path []string) string

PathToTypeName converts a path, like Object/field1/nestedField into a go type name.

func PropertiesEqual

func PropertiesEqual(a, b Property) bool

func RefPathToGoType

func RefPathToGoType(refPath string) (string, error)

RefPathToGoType takes a $ref value and converts it to a Go typename. #/components/schemas/Foo -> Foo #/components/parameters/Bar -> Bar #/components/responses/Baz -> Baz Remote components (document.json#/Foo) are supported if they present in --import-mapping URL components (http://deepmap.com/schemas/document.json#/Foo) are supported if they present in --import-mapping Remote and URL also support standard local paths even though the spec doesn't mention them.

func RefPathToObjName

func RefPathToObjName(refPath string) string

RefPathToObjName returns the name of referenced object without changes.

#/components/schemas/Foo -> Foo
#/components/parameters/Bar -> Bar
#/components/responses/baz_baz -> baz_baz
document.json#/Foo -> Foo
http://deepmap.com/schemas/document.json#/objObj -> objObj

Does not check refPath correctness.

func ReplacePathParamsWithStr

func ReplacePathParamsWithStr(uri string) string

ReplacePathParamsWithStr replaces path parameters of the form {param} with %s

func ResolveNames added in v2.7.0

func ResolveNames(schemas []*GatheredSchema) map[string]string

ResolveNames takes the gathered schemas and assigns unique Go type names to each. It returns a map from the schema's path string to the resolved Go type name.

func SanitizeCode

func SanitizeCode(goCode string) string

SanitizeCode runs sanitizers across the generated Go code to ensure the generated code will be able to compile.

func SanitizeEnumNames

func SanitizeEnumNames(enumNames, enumValues []string) map[string]string

SanitizeEnumNames fixes illegal chars in the enum names and removes duplicates

func SanitizeGoIdentifier added in v2.7.0

func SanitizeGoIdentifier(str string) string

SanitizeGoIdentifier replaces illegal runes in the given string so that it is a valid Go identifier. Unlike SanitizeGoIdentity, it does not prefix reserved keywords or predeclared identifiers. This is useful for contexts where the name must be a valid identifier but is not used as a Go symbol (e.g. net/http ServeMux wildcard names).

func SanitizeGoIdentity

func SanitizeGoIdentity(str string) string

SanitizeGoIdentity deletes and replaces the illegal runes in the given string to use the string as a valid identity. It also prefixes reserved keywords and predeclared identifiers with an underscore.

func SchemaHasAdditionalProperties

func SchemaHasAdditionalProperties(schema *openapi3.Schema) bool

According to the spec, additionalProperties may be true, false, or a schema. If not present, true is implied. If it's a schema, true is implied. If it's false, no additional properties are allowed. We're going to act a little differently, in that if you want additionalProperties code to be generated, you must specify an additionalProperties type If additionalProperties it true/false, this field will be non-nil.

func SchemaNameToTypeName

func SchemaNameToTypeName(name string) 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 SetGlobalStateSpec

func SetGlobalStateSpec(spec *openapi3.T)

func SortedMapKeys

func SortedMapKeys[T any](m map[string]T) []string

SortedMapKeys takes a map with keys of type string and returns a slice of those keys sorted lexicographically.

func SortedSchemaKeys

func SortedSchemaKeys(dict map[string]*openapi3.SchemaRef) []string

SortedSchemaKeys returns the keys of the given SchemaRef dictionary in sorted order, since Golang scrambles dictionary keys. This isn't a generic key sort, because we support an extension to grant specific orders to schemas to help control output ordering.

func SortedSecuritySchemeKeys added in v2.7.0

func SortedSecuritySchemeKeys(dict map[string]*openapi3.SecuritySchemeRef) []string

SortedSecuritySchemeKeys returns sorted keys for a SecuritySchemeRef dict

func StringToGoComment

func StringToGoComment(in string) string

StringToGoComment renders a possible multi-line string as a valid Go-Comment. Each line is prefixed as a comment.

func StringToGoString added in v2.6.0

func StringToGoString(in string) string

StringToGoString takes an arbitrary string and converts it to a valid Go string literal, including the quotes. For instance, `foo "bar"` would be converted to `"foo \"bar\""`

func StringWithTypeNameToGoComment

func StringWithTypeNameToGoComment(in, typeName string) string

StringWithTypeNameToGoComment renders a possible multi-line string as a valid Go-Comment, including the name of the type being referenced. Each line is prefixed as a comment.

func SwaggerUriToChiUri

func SwaggerUriToChiUri(uri string) string

SwaggerUriToChiUri converts a swagger style path URI with parameters to a Chi compatible path URI. We need to replace all Swagger parameters with "{param}". Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToEchoUri

func SwaggerUriToEchoUri(uri string) string

SwaggerUriToEchoUri converts a OpenAPI style path URI with parameters to an Echo compatible path URI. We need to replace all of OpenAPI parameters with ":param". Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToFiberUri

func SwaggerUriToFiberUri(uri string) string

SwaggerUriToFiberUri converts a OpenAPI style path URI with parameters to a Fiber compatible path URI. We need to replace all of OpenAPI parameters with ":param". Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToGinUri

func SwaggerUriToGinUri(uri string) string

SwaggerUriToGinUri converts a swagger style path URI with parameters to a Gin compatible path URI. We need to replace all Swagger parameters with ":param". Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToGorillaUri

func SwaggerUriToGorillaUri(uri string) string

SwaggerUriToGorillaUri converts a swagger style path URI with parameters to a Gorilla compatible path URI. We need to replace all Swagger parameters with ":param". Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToIrisUri

func SwaggerUriToIrisUri(uri string) string

SwaggerUriToIrisUri converts a OpenAPI style path URI with parameters to an Iris compatible path URI. We need to replace all of OpenAPI parameters with

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func SwaggerUriToStdHttpUri

func SwaggerUriToStdHttpUri(uri string) string

SwaggerUriToStdHttpUri converts a swagger style path URI with parameters to a net/http ServeMux compatible path URI. Parameter names are sanitized to be valid Go identifiers, as required by ServeMux wildcard segments. Valid input parameters are:

{param}
{param*}
{.param}
{.param*}
{;param}
{;param*}
{?param}
{?param*}

func ToCamelCase

func ToCamelCase(str string) string

ToCamelCase will convert query-arg style strings to CamelCase. We will use `., -, +, :, ;, _, ~, ' ', (, ), {, }, [, ]` as valid delimiters for words. So, "word.word-word+word:word;word_word~word word(word)word{word}[word]" would be converted to WordWordWordWordWordWordWordWordWordWordWordWordWord

func ToCamelCaseWithDigits

func ToCamelCaseWithDigits(s string) string

ToCamelCaseWithDigits function will convert query-arg style strings to CamelCase. We will use `., -, +, :, ;, _, ~, ' ', (, ), {, }, [, ]` as valid delimiters for words. The difference of ToCamelCase that letter after a number becomes capitalized. So, "word.word-word+word:word;word_word~word word(word)word{word}[word]3word" would be converted to WordWordWordWordWordWordWordWordWordWordWordWordWord3Word

func ToCamelCaseWithInitialism

func ToCamelCaseWithInitialism(str string) string

func ToCamelCaseWithInitialisms

func ToCamelCaseWithInitialisms(s string) string

ToCamelCaseWithInitialisms function will convert query-arg style strings to CamelCase with initialisms in uppercase. So, httpOperationId would be converted to HTTPOperationID

func TypeDefinitionsEquivalent

func TypeDefinitionsEquivalent(t1, t2 TypeDefinition) bool

TypeDefinitionsEquivalent checks for equality between two type definitions, but not every field is considered. We only want to know if they are fundamentally the same type.

func UppercaseFirstCharacter

func UppercaseFirstCharacter(str string) string

UppercaseFirstCharacter Uppercases the first character in a string. This assumes UTF-8, so we have to be careful with unicode, don't treat it as a byte array.

func UppercaseFirstCharacterWithPkgName

func UppercaseFirstCharacterWithPkgName(str string) string

Uppercase the first character in a identifier with pkg name. This assumes UTF-8, so we have to be careful with unicode, don't treat it as a byte array.

Types

type AdditionalImport

type AdditionalImport struct {
	Alias   string `yaml:"alias,omitempty"`
	Package string `yaml:"package"`
}

type CompatibilityOptions

type CompatibilityOptions struct {
	// In the past, we merged schemas for `allOf` by inlining each schema
	// within the schema list. This approach, though, is incorrect because
	// `allOf` merges at the schema definition level, not at the resulting model
	// level. So, new behavior merges OpenAPI specs but generates different code
	// than we have in the past. Set OldMergeSchemas to true for the old behavior.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/531
	OldMergeSchemas bool `yaml:"old-merge-schemas,omitempty"`
	// Enum values can generate conflicting typenames, so we've updated the
	// code for enum generation to avoid these conflicts, but it will result
	// in some enum types being renamed in existing code. Set OldEnumConflicts to true
	// to revert to old behavior. Please see:
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/549
	OldEnumConflicts bool `yaml:"old-enum-conflicts,omitempty"`
	// It was a mistake to generate a go type definition for every $ref in
	// the OpenAPI schema. New behavior uses type aliases where possible, but
	// this can generate code which breaks existing builds. Set OldAliasing to true
	// for old behavior.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/549
	OldAliasing bool `yaml:"old-aliasing,omitempty"`
	// When an object contains no members, and only an additionalProperties specification,
	// it is flattened to a map
	DisableFlattenAdditionalProperties bool `yaml:"disable-flatten-additional-properties,omitempty"`
	// When an object property is both required and readOnly the go model is generated
	// as a pointer. Set DisableRequiredReadOnlyAsPointer to true to mark them as non pointer.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/604
	DisableRequiredReadOnlyAsPointer bool `yaml:"disable-required-readonly-as-pointer,omitempty"`
	// When set to true, always prefix enum values with their type name instead of only
	// when typenames would be conflicting.
	AlwaysPrefixEnumValues bool `yaml:"always-prefix-enum-values,omitempty"`
	// Our generated code for Chi has historically inverted the order in which Chi middleware is
	// applied such that the last invoked middleware ends up executing first in the Chi chain
	// This resolves the behavior such that middlewares are chained in the order they are invoked.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/786
	ApplyChiMiddlewareFirstToLast bool `yaml:"apply-chi-middleware-first-to-last,omitempty"`
	// Our generated code for gorilla/mux has historically inverted the order in which gorilla/mux middleware is
	// applied such that the last invoked middleware ends up executing first in the middlewares chain
	// This resolves the behavior such that middlewares are chained in the order they are invoked.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/841
	ApplyGorillaMiddlewareFirstToLast bool `yaml:"apply-gorilla-middleware-first-to-last,omitempty"`
	// CircularReferenceLimit allows controlling the limit for circular reference checking.
	// In some OpenAPI specifications, we have a higher number of circular
	// references than is allowed out-of-the-box, but can be tuned to allow
	// traversing them.
	// Deprecated: In kin-openapi v0.126.0 (https://github.com/getkin/kin-openapi/tree/v0.126.0?tab=readme-ov-file#v01260) the Circular Reference Counter functionality was removed, instead resolving all references with backtracking, to avoid needing to provide a limit to reference counts.
	CircularReferenceLimit int `yaml:"circular-reference-limit"`
	// AllowUnexportedStructFieldNames makes it possible to output structs that have fields that are unexported.
	//
	// This is expected to be used in conjunction with `x-go-name` and `x-oapi-codegen-only-honour-go-name` to override the resulting output field name, and `x-oapi-codegen-extra-tags` to not produce JSON tags for `encoding/json`, such as:
	//
	//  “`yaml
	//   id:
	//     type: string
	//     x-go-name: accountIdentifier
	//     x-oapi-codegen-extra-tags:
	//       json: "-"
	//     x-oapi-codegen-only-honour-go-name: true
	//   “`
	//
	// NOTE that this can be confusing to users of your OpenAPI specification, who may see a field present and therefore be expecting to see/use it in the request/response, without understanding the nuance of how `oapi-codegen` generates the code.
	AllowUnexportedStructFieldNames bool `yaml:"allow-unexported-struct-field-names"`

	// PreserveOriginalOperationIdCasingInEmbeddedSpec ensures that the `operationId` from the source spec is kept intact in case when embedding it into the Embedded Spec output.
	// When `oapi-codegen` parses the original OpenAPI specification, it will apply the configured `output-options.name-normalizer` to each operation's `operationId` before that is used to generate code from.
	// However, this is also applied to the copy of the `operationId`s in the `embedded-spec` generation, which means that the embedded OpenAPI specification is then out-of-sync with the input specificiation.
	// To ensure that the `operationId` in the embedded spec is preserved as-is from the input specification, set this.
	// NOTE that this will not impact generated code.
	// NOTE that if you're using `include-operation-ids` or `exclude-operation-ids` you may want to ensure that the `operationId`s used are correct.
	PreserveOriginalOperationIdCasingInEmbeddedSpec bool `yaml:"preserve-original-operation-id-casing-in-embedded-spec"`

	// HeadersImplicitlyRequired treats all response headers as required, ignoring
	// the `required` property from the header definition. Prior to v2.6.0,
	// oapi-codegen generated all response headers as direct values (implicitly
	// required). The OpenAPI specification defaults headers to optional
	// (required: false), so the corrected behavior generates optional headers as
	// pointers. Set this to true to restore the old behavior where all headers
	// are treated as required.
	// Please see https://github.com/oapi-codegen/oapi-codegen/issues/2267
	HeadersImplicitlyRequired bool `yaml:"headers-implicitly-required,omitempty"`
}

CompatibilityOptions specifies backward compatibility settings for the code generator.

func (CompatibilityOptions) Validate added in v2.4.0

func (co CompatibilityOptions) Validate() map[string]string

type Configuration

type Configuration struct {
	// PackageName to generate the code under
	PackageName string `yaml:"package"`
	// Generate specifies which supported output formats to generate
	Generate GenerateOptions `yaml:"generate,omitempty"`
	// CompatibilityOptions specifies backward compatibility settings for the code generator
	Compatibility CompatibilityOptions `yaml:"compatibility,omitempty"`
	// OutputOptions are used to modify the output code in some way.
	OutputOptions OutputOptions `yaml:"output-options,omitempty"`
	// ImportMapping specifies the golang package path for each external reference
	ImportMapping map[string]string `yaml:"import-mapping,omitempty"`
	// AdditionalImports defines any additional Go imports to add to the generated code
	AdditionalImports []AdditionalImport `yaml:"additional-imports,omitempty"`
	// NoVCSVersionOverride allows overriding the version of the application for cases where no Version Control System (VCS) is available when building, for instance when using a Nix derivation.
	// See documentation for how to use it in examples/no-vcs-version-override/README.md
	NoVCSVersionOverride *string `yaml:"-"`
}

Configuration defines code generation customizations

func (Configuration) UpdateDefaults

func (o Configuration) UpdateDefaults() Configuration

UpdateDefaults sets reasonable default values for unset fields in Configuration

func (Configuration) Validate

func (o Configuration) Validate() error

Validate checks whether Configuration represent a valid configuration

type Constants

type Constants struct {
	// SecuritySchemeProviderNames holds all provider names for security schemes.
	SecuritySchemeProviderNames []string
	// EnumDefinitions holds type and value information for all enums
	EnumDefinitions []EnumDefinition
	// SkipEnumValidate suppresses generation of the `Valid()` method on
	// enum types. Mirrors OutputOptions.SkipEnumValidate.
	SkipEnumValidate bool
}

type Discriminator

type Discriminator struct {
	// maps discriminator value to go type
	Mapping map[string]string

	// JSON property name that holds the discriminator
	Property string
}

func (*Discriminator) JSONTag

func (d *Discriminator) JSONTag() string

func (*Discriminator) PropertyName

func (d *Discriminator) PropertyName() string

type EnumDefinition

type EnumDefinition struct {
	// Schema is the scheme of a type which has a list of enum values, eg, the
	// "container" of the enum.
	Schema Schema
	// TypeName is the name of the enum's type, usually aliased from something.
	TypeName string
	// ValueWrapper wraps the value. It's used to conditionally apply quotes
	// around strings.
	ValueWrapper string
	// PrefixTypeName determines if the enum value is prefixed with its TypeName.
	// This is set to true when this enum conflicts with another in terms of
	// TypeNames or when explicitly requested via the
	// `compatibility.always-prefix-enum-values` option.
	PrefixTypeName bool
}

EnumDefinition holds type information for enum

func (*EnumDefinition) GetValues

func (e *EnumDefinition) GetValues() map[string]string

GetValues generates enum names in a way to minimize global conflicts

type FieldDescriptor

type FieldDescriptor struct {
	Required bool   // Is the schema required? If not, we'll pass by pointer
	GoType   string // The Go type needed to represent the json type.
	GoName   string // The Go compatible type name for the type
	JsonName string // The json type name for the type
	IsRef    bool   // Is this schema a reference to predefined object?
}

type FormatMapping added in v2.6.0

type FormatMapping struct {
	Default SimpleTypeSpec            `yaml:"default" json:"default"`
	Formats map[string]SimpleTypeSpec `yaml:"formats,omitempty" json:"formats,omitempty"`
}

FormatMapping defines the default Go type and format-specific overrides for an OpenAPI type.

func (FormatMapping) Resolve added in v2.6.0

func (fm FormatMapping) Resolve(format string) SimpleTypeSpec

Resolve returns the SimpleTypeSpec for a given format string. If the format has a specific mapping, that is returned; otherwise the default is used.

type GatheredSchema added in v2.7.0

type GatheredSchema struct {
	Path           SchemaPath
	Context        SchemaContext
	Ref            string           // $ref string if this is a reference
	Schema         *openapi3.Schema // The resolved schema value
	OperationID    string           // Enclosing operation's ID, if any
	ContentType    string           // Media type, if from request/response body
	StatusCode     string           // HTTP status code, if from a response
	ParamIndex     int              // Parameter index within an operation
	ComponentName  string           // The component name (e.g., "Bar" for components/schemas/Bar)
	GoNameOverride string           // x-go-name override from the component or its parent container
}

GatheredSchema represents a schema discovered during the gather pass, along with its document location and context metadata.

func GatherSchemas added in v2.7.0

func GatherSchemas(spec *openapi3.T, opts Configuration) []*GatheredSchema

GatherSchemas walks the entire OpenAPI spec and collects all schemas that will need Go type names. This is the first pass of the multi-pass resolution.

func (*GatheredSchema) FormatPath added in v2.7.0

func (gs *GatheredSchema) FormatPath() string

FormatPath returns a human-readable representation of the path for debugging.

func (*GatheredSchema) IsComponentSchema added in v2.7.0

func (gs *GatheredSchema) IsComponentSchema() bool

IsComponentSchema returns true if this schema came from components/schemas.

type GenerateOptions

type GenerateOptions struct {
	// IrisServer specifies whether to generate iris server boilerplate
	IrisServer bool `yaml:"iris-server,omitempty"`
	// ChiServer specifies whether to generate chi server boilerplate
	ChiServer bool `yaml:"chi-server,omitempty"`
	// FiberServer specifies whether to generate fiber server boilerplate
	FiberServer bool `yaml:"fiber-server,omitempty"`
	// EchoServer specifies whether to generate echo server boilerplate
	EchoServer bool `yaml:"echo-server,omitempty"`
	// Echo5Server specifies whether to generate echo v5 server boilerplate
	Echo5Server bool `yaml:"echo5-server,omitempty"`
	// GinServer specifies whether to generate gin server boilerplate
	GinServer bool `yaml:"gin-server,omitempty"`
	// GorillaServer specifies whether to generate Gorilla server boilerplate
	GorillaServer bool `yaml:"gorilla-server,omitempty"`
	// StdHTTPServer specifies whether to generate stdlib http server boilerplate
	StdHTTPServer bool `yaml:"std-http-server,omitempty"`
	// Strict specifies whether to generate strict server wrapper
	Strict bool `yaml:"strict-server,omitempty"`
	// Client specifies whether to generate client boilerplate
	Client bool `yaml:"client,omitempty"`
	// Models specifies whether to generate type definitions
	Models bool `yaml:"models,omitempty"`
	// EmbeddedSpec indicates whether to embed the swagger spec in the generated code
	EmbeddedSpec bool `yaml:"embedded-spec,omitempty"`
	// ServerURLs generates types for the `Server` definitions' URLs, instead of needing to provide your own values
	ServerURLs bool `yaml:"server-urls,omitempty"`
}

GenerateOptions specifies which supported output formats to generate.

func (GenerateOptions) RouterImports added in v2.7.0

func (g GenerateOptions) RouterImports() []AdditionalImport

RouterImports returns the framework-specific and strict middleware imports needed based on which server type is selected.

func (GenerateOptions) Validate added in v2.4.0

func (oo GenerateOptions) Validate() map[string]string

func (GenerateOptions) Warnings added in v2.5.0

func (oo GenerateOptions) Warnings() map[string]string

type NameNormalizer

type NameNormalizer func(string) string

NameNormalizer is a function that takes a type name, and returns that type name converted into a different format.

This may be an Operation ID i.e. `retrieveUserRequests` or a Schema name i.e. `BigBlockOfCheese`

NOTE: this must return a string that can be used as a valid Go type name

type NameNormalizerFunction

type NameNormalizerFunction string
const (
	// NameNormalizerFunctionUnset is the default case, where the `name-normalizer` option hasn't been set. This will use the `ToCamelCase` function.
	//
	// See the docs for `NameNormalizerFunctionToCamelCase` for more details.
	NameNormalizerFunctionUnset NameNormalizerFunction = ""
	// NameNormalizerFunctionToCamelCase will use the `ToCamelCase` function.
	//
	// For instance:
	//
	// - `getHttpPet`   => `GetHttpPet`
	// - `OneOf2things` => `OneOf2things`
	NameNormalizerFunctionToCamelCase NameNormalizerFunction = "ToCamelCase"
	// NameNormalizerFunctionToCamelCaseWithDigits will use the `NameNormalizerFunctionToCamelCaseWithDigits` function.
	//
	// For instance:
	//
	// - `getHttpPet`   => `GetHttpPet`
	// - `OneOf2things` => `OneOf2Things`
	NameNormalizerFunctionToCamelCaseWithDigits NameNormalizerFunction = "ToCamelCaseWithDigits"
	// NameNormalizerFunctionToCamelCaseWithInitialisms will use the `NameNormalizerFunctionToCamelCaseWithInitialisms` function.
	//
	// For instance:
	//
	// - `getHttpPet`   => `GetHTTPPet`
	// - `OneOf2things` => `OneOf2things`
	NameNormalizerFunctionToCamelCaseWithInitialisms NameNormalizerFunction = "ToCamelCaseWithInitialisms"
)

type NameNormalizerMap

type NameNormalizerMap map[NameNormalizerFunction]NameNormalizer

func (NameNormalizerMap) Options

func (m NameNormalizerMap) Options() []string

type OperationDefinition

type OperationDefinition struct {
	// OperationId is the `operationId` field from the OpenAPI Specification, after going through a `nameNormalizer`, and will be used to generate function names
	OperationId string
	// SpecOperationId is the raw `operationId` value as it appears in the OpenAPI spec, before normalization to a Go identifier. Empty when the spec didn't supply one (in which case the codegen-generated ID is the only available identifier and is exposed via OperationId).
	SpecOperationId string

	PathParams          []ParameterDefinition // Parameters in the path, eg, /path/:param
	HeaderParams        []ParameterDefinition // Parameters in HTTP headers
	QueryParams         []ParameterDefinition // Parameters in the query, /path?param
	CookieParams        []ParameterDefinition // Parameters in cookies
	TypeDefinitions     []TypeDefinition      // These are all the types we need to define for this operation
	SecurityDefinitions []SecurityDefinition  // These are the security providers
	BodyRequired        bool
	Bodies              []RequestBodyDefinition // The list of bodies for which to generate handlers.
	Responses           []ResponseDefinition    // The list of responses that can be accepted by handlers.
	Summary             string                  // Summary string from Swagger, used to generate a comment
	Method              string                  // GET, POST, DELETE, etc.
	Path                string                  // The Swagger path for the operation, like /resource/{id}
	Spec                *openapi3.Operation
	IsAlias             bool   // True when this path is a $ref alias of another path item
	AliasTarget         string // When IsAlias is true, this is the OperationId of the canonical operation (for route registration to reference the correct wrapper)
	PathItemRef         string // The path item's $ref (if any); used to qualify externally-loaded schemas referenced from this operation's responses
}

OperationDefinition describes an Operation

func OperationDefinitions

func OperationDefinitions(swagger *openapi3.T) ([]OperationDefinition, error)

OperationDefinitions returns all operations for a swagger definition.

func (*OperationDefinition) AllParams

func (o *OperationDefinition) AllParams() []ParameterDefinition

AllParams returns all parameters

func (*OperationDefinition) GetResponseTypeDefinitions

func (o *OperationDefinition) GetResponseTypeDefinitions() ([]ResponseTypeDefinition, error)

GetResponseTypeDefinitions produces a list of type definitions for a given Operation for the response types which we know how to parse. These will be turned into fields on a response object for automatic deserialization of responses in the generated Client code. See "client-with-responses.tmpl".

func (*OperationDefinition) HandlerName added in v2.7.0

func (o *OperationDefinition) HandlerName() string

HandlerName returns the OperationId to use when referencing the server-side wrapper function. For alias operations this is the canonical operation's ID, since the alias doesn't generate its own wrapper.

func (*OperationDefinition) HasBody

func (o *OperationDefinition) HasBody() bool

HasBody is called by the template engine to determine whether to generate body marshaling code on the client. This is true for all body types, whether we generate types for them.

func (*OperationDefinition) HasMaskedRequestContentTypes

func (o *OperationDefinition) HasMaskedRequestContentTypes() bool

func (*OperationDefinition) MiddlewareKey added in v2.7.0

func (o *OperationDefinition) MiddlewareKey() string

MiddlewareKey returns the identifier to use as the key in per-operation middleware maps. The raw spec OperationId is preferred so map keys mirror the OpenAPI spec verbatim; falls back to the normalized OperationId when the spec didn't supply one.

func (*OperationDefinition) Params

Params returns the list of all parameters except Path parameters. Path parameters are handled differently from the rest, since they're mandatory.

func (*OperationDefinition) RequiresParamObject

func (o *OperationDefinition) RequiresParamObject() bool

If we have parameters other than path parameters, they're bundled into an object. Returns true if we have any of those. This is used from the template engine.

func (*OperationDefinition) SummaryAsComment

func (o *OperationDefinition) SummaryAsComment() string

SummaryAsComment returns the Operations summary as a multi line comment

type OutputOptions

type OutputOptions struct {
	// Whether to skip go imports on the generated code
	SkipFmt bool `yaml:"skip-fmt,omitempty"`
	// Whether to skip pruning unused components on the generated code
	SkipPrune bool `yaml:"skip-prune,omitempty"`
	// SkipEnumValidate disables the generation of the `Valid()` method on
	// enum types. By default each generated enum type includes a `Valid()
	// bool` method which returns true when the value matches one of the
	// defined constants; set this to true to suppress that method when it
	// conflicts with user-defined methods of the same name.
	SkipEnumValidate bool `yaml:"skip-enum-validate,omitempty"`
	// Only include operations that have one of these tags. Ignored when empty.
	IncludeTags []string `yaml:"include-tags,omitempty"`
	// Exclude operations that have one of these tags. Ignored when empty.
	ExcludeTags []string `yaml:"exclude-tags,omitempty"`
	// Only include operations that have one of these operation-ids. Ignored when empty.
	IncludeOperationIDs []string `yaml:"include-operation-ids,omitempty"`
	// Exclude operations that have one of these operation-ids. Ignored when empty.
	ExcludeOperationIDs []string `yaml:"exclude-operation-ids,omitempty"`
	// Override built-in templates from user-provided files
	UserTemplates map[string]string `yaml:"user-templates,omitempty"`

	// Exclude from generation schemas with given names. Ignored when empty.
	ExcludeSchemas []string `yaml:"exclude-schemas,omitempty"`
	// The suffix used for responses types
	ResponseTypeSuffix string `yaml:"response-type-suffix,omitempty"`
	// Override the default generated client type with the value
	ClientTypeName string `yaml:"client-type-name,omitempty"`
	// AdditionalInitialisms is a list of additional initialisms to use when generating names.
	// NOTE that this has no effect unless the `name-normalizer` is set to `ToCamelCaseWithInitialisms`
	AdditionalInitialisms []string `yaml:"additional-initialisms,omitempty"`
	// StreamingContentTypes are regex patterns matched against response
	// Content-Type to decide when to generate a flush-per-chunk streaming
	// response path. User-provided patterns are merged with the defaults
	// (text/event-stream, application/jsonl, application/x-ndjson); invalid
	// regexes fail Validate().
	StreamingContentTypes []string `yaml:"streaming-content-types,omitempty"`
	// Whether to generate nullable type for nullable fields
	NullableType bool `yaml:"nullable-type,omitempty"`

	// DisableTypeAliasesForType allows defining which OpenAPI `type`s will explicitly not use type aliases
	// Currently supports:
	//   "array"
	DisableTypeAliasesForType []string `yaml:"disable-type-aliases-for-type"`

	// NameNormalizer is the method used to normalize Go names and types, for instance converting the text `MyApi` to `MyAPI`. Corresponds with the constants defined for `codegen.NameNormalizerFunction`
	NameNormalizer string `yaml:"name-normalizer,omitempty"`

	// Overlay defines configuration for the OpenAPI Overlay (https://github.com/OAI/Overlay-Specification) to manipulate the OpenAPI specification before generation. This allows modifying the specification without needing to apply changes directly to it, making it easier to keep it up-to-date.
	Overlay OutputOptionsOverlay `yaml:"overlay"`

	// EnableYamlTags adds YAML tags to generated structs, in addition to default JSON ones
	EnableYamlTags bool `yaml:"yaml-tags,omitempty"`

	// ClientResponseBytesFunction decides whether to enable the generation of a `Bytes()` method on response objects for `ClientWithResponses`
	ClientResponseBytesFunction bool `yaml:"client-response-bytes-function,omitempty"`

	// SkipClientResponseContentType disables the generation of a `ContentType()` method on response objects for `ClientWithResponses`, which is otherwise generated by default.
	SkipClientResponseContentType bool `yaml:"skip-client-response-content-type,omitempty"`

	// PreferSkipOptionalPointer allows defining at a global level whether to omit the pointer for a type to indicate that the field/type is optional.
	// This is the same as adding `x-go-type-skip-optional-pointer` to each field (manually, or using an OpenAPI Overlay)
	PreferSkipOptionalPointer bool `yaml:"prefer-skip-optional-pointer,omitempty"`

	// PreferSkipOptionalPointerWithOmitzero allows generating the `omitzero` JSON tag types that would have had an optional pointer.
	// This is the same as adding `x-omitzero` to each field (manually, or using an OpenAPI Overlay).
	// A field can set `x-omitzero: false` to disable the `omitzero` JSON tag.
	// NOTE that this must be used alongside `prefer-skip-optional-pointer`, otherwise makes no difference.
	PreferSkipOptionalPointerWithOmitzero bool `yaml:"prefer-skip-optional-pointer-with-omitzero,omitempty"`

	// PreferSkipOptionalPointerOnContainerTypes allows disabling the generation of an "optional pointer" for an optional field that is a container type (such as a slice or a map), which ends up requiring an additional, unnecessary, `... != nil` check
	PreferSkipOptionalPointerOnContainerTypes bool `yaml:"prefer-skip-optional-pointer-on-container-types,omitempty"`

	// ResolveTypeNameCollisions, when set to true, automatically renames
	// types that collide across different OpenAPI component sections
	// (schemas, parameters, requestBodies, responses, headers) by appending
	// a suffix based on the component section (e.g., "Parameter", "Response",
	// "RequestBody"). It also detects collisions between component types and
	// client response wrapper types (e.g., issue #1474). Without this, the
	// codegen will error on duplicate type names, requiring manual resolution
	// via x-go-name.
	ResolveTypeNameCollisions bool `yaml:"resolve-type-name-collisions,omitempty"`

	// TypeMapping allows customizing OpenAPI type/format to Go type mappings.
	// User-specified mappings are merged on top of the defaults.
	TypeMapping *TypeMapping `yaml:"type-mapping,omitempty"`
}

OutputOptions are used to modify the output code in some way.

func (OutputOptions) Validate added in v2.4.0

func (oo OutputOptions) Validate() map[string]string

type OutputOptionsOverlay added in v2.4.0

type OutputOptionsOverlay struct {
	Path string `yaml:"path"`

	// Strict defines whether the Overlay should be applied in a strict way, highlighting any actions that will not take any effect. This can, however, lead to more work when testing new actions in an Overlay, so can be turned off with this setting.
	// Defaults to true.
	Strict *bool `yaml:"strict,omitempty"`
}

type ParameterDefinition

type ParameterDefinition struct {
	ParamName string // The original json parameter name, eg param_name
	In        string // Where the parameter is defined - path, header, cookie, query
	Required  bool   // Is this a required parameter?
	Spec      *openapi3.Parameter
	Schema    Schema
}

func CombineOperationParameters

func CombineOperationParameters(globalParams []ParameterDefinition, localParams []ParameterDefinition) ([]ParameterDefinition, error)

CombineOperationParameters combines the Parameters defined at a global level (Parameters defined for all methods on a given path) with the Parameters defined at a local level (Parameters defined for a specific path), preferring the locally defined parameter over the global one

func DescribeParameters

func DescribeParameters(params openapi3.Parameters, path []string) ([]ParameterDefinition, error)

DescribeParameters walks the given parameters dictionary, and generates the above descriptors into a flat list. This makes it a lot easier to traverse the data in the template engine.

func FilterParameterDefinitionByType

func FilterParameterDefinitionByType(params []ParameterDefinition, in string) []ParameterDefinition

FilterParameterDefinitionByType returns the subset of the specified parameters which are of the specified type.

func SortParamsByPath

func SortParamsByPath(path string, in []ParameterDefinition) ([]ParameterDefinition, error)

SortParamsByPath reorders the given parameter definitions to match those in the path URI. If a parameter appears more than once in the path (e.g. Keycloak's /clients/{client-uuid}/roles/{role-name}/composites/clients/{client-uuid}), duplicates are removed and only the first occurrence determines the order.

func (*ParameterDefinition) Explode

func (pd *ParameterDefinition) Explode() bool

func (ParameterDefinition) GoName

func (pd ParameterDefinition) GoName() string

func (ParameterDefinition) GoVariableName

func (pd ParameterDefinition) GoVariableName() string

func (ParameterDefinition) HasOptionalPointer added in v2.5.0

func (pd ParameterDefinition) HasOptionalPointer() bool

HasOptionalPointer indicates whether the generated property has an optional pointer associated with it. This takes into account the `x-go-type-skip-optional-pointer` extension, allowing a parameter definition to control whether the pointer should be skipped.

func (ParameterDefinition) IndirectOptional deprecated

func (pd ParameterDefinition) IndirectOptional() bool

Deprecated: Use HasOptionalPointer, as it is clearer what the intent is.

func (*ParameterDefinition) IsJson

func (pd *ParameterDefinition) IsJson() bool

func (*ParameterDefinition) IsPassThrough

func (pd *ParameterDefinition) IsPassThrough() bool

func (*ParameterDefinition) IsStyled

func (pd *ParameterDefinition) IsStyled() bool

func (*ParameterDefinition) JsonTag

func (pd *ParameterDefinition) JsonTag() string

JsonTag generates the JSON annotation to map GoType to json type name. If Parameter Foo is marshaled to json as "foo", this will create the annotation 'json:"foo"' It also includes any additional struct tags from x-oapi-codegen-extra-tags at the parameter or schema level (parameter-level takes precedence).

func (ParameterDefinition) RequiresNilCheck added in v2.6.0

func (pd ParameterDefinition) RequiresNilCheck() bool

RequiresNilCheck indicates whether the generated property should have a nil check performed on it before other checks. This should be used in templates when performing `nil` checks, but NOT when i.e. determining if there should be an optional pointer given to the type - in that case, use `HasOptionalPointer`

func (ParameterDefinition) SanitizedParamName added in v2.7.0

func (pd ParameterDefinition) SanitizedParamName() string

SanitizedParamName returns the parameter name sanitized to be a valid Go identifier. This is needed for routers like net/http's ServeMux where path wildcards (e.g. {name}) must be valid Go identifiers. For the original OpenAPI parameter name (e.g. for error messages or JSON tags), use ParamName.

func (*ParameterDefinition) SchemaFormat added in v2.6.0

func (pd *ParameterDefinition) SchemaFormat() string

SchemaFormat returns the OpenAPI format string for this parameter's schema (e.g. "byte", "date-time"), or empty string if unavailable.

func (*ParameterDefinition) SchemaType added in v2.6.0

func (pd *ParameterDefinition) SchemaType() string

SchemaType returns the first OpenAPI type string for this parameter's schema (e.g. "string", "integer"), or empty string if unavailable.

func (*ParameterDefinition) Style

func (pd *ParameterDefinition) Style() string

func (ParameterDefinition) TypeDef

func (pd ParameterDefinition) TypeDef() string

TypeDef is here as an adapter after a large refactoring so that I don't have to update all the templates. It returns the type definition for a parameter, without the leading '*' for optional ones.

func (ParameterDefinition) ZeroValueIsNil added in v2.6.0

func (pd ParameterDefinition) ZeroValueIsNil() bool

ZeroValueIsNil is a helper function to determine if the given Go type used for this property has `nil` as its Go zero value. Slices (OpenAPI `array`) and maps (OpenAPI `object` with only `additionalProperties`, rendered as `map[K]V`) both satisfy this — templates use it to decide whether to emit a nil-check before reading the field.

type ParameterDefinitions

type ParameterDefinitions []ParameterDefinition

func (ParameterDefinitions) FindByName

func (p ParameterDefinitions) FindByName(name string) *ParameterDefinition

type Property

type Property struct {
	Description   string
	JsonFieldName string
	Schema        Schema
	Required      bool
	Nullable      bool
	ReadOnly      bool
	WriteOnly     bool
	NeedsFormTag  bool
	Extensions    map[string]any
	Deprecated    bool
}

func (Property) GoFieldName

func (p Property) GoFieldName() string

func (Property) GoTypeDef

func (p Property) GoTypeDef() string

func (Property) HasOptionalPointer added in v2.5.0

func (p Property) HasOptionalPointer() bool

HasOptionalPointer indicates whether the generated property has an optional pointer associated with it. This takes into account the `x-go-type-skip-optional-pointer` extension, allowing a parameter definition to control whether the pointer should be skipped.

func (Property) RequiresNilCheck added in v2.5.1

func (p Property) RequiresNilCheck() bool

RequiresNilCheck indicates whether the generated property should have a nil check performed on it before other checks. This should be used in templates when performing `nil` checks, but NOT when i.e. determining if there should be an optional pointer given to the type - in that case, use `HasOptionalPointer`

func (Property) ZeroValueIsNil added in v2.5.1

func (p Property) ZeroValueIsNil() bool

ZeroValueIsNil is a helper function to determine if the given Go type used for this property has `nil` as its Go zero value. Slices (OpenAPI `array`) and maps (OpenAPI `object` with only `additionalProperties`, rendered as `map[K]V`) both satisfy this — the custom-marshal templates use it to decide whether to emit a nil-check before reading the field.

type RefWrapper

type RefWrapper struct {
	Ref       string
	HasValue  bool
	SourceRef any
}

type RequestBodyDefinition

type RequestBodyDefinition struct {
	// Is this body required, or optional?
	Required bool

	// This is the schema describing this body
	Schema Schema

	// When we generate type names, we need a Tag for it, such as JSON, in
	// which case we will produce "JSONBody".
	NameTag string

	// This is the content type corresponding to the body, eg, application/json
	ContentType string

	// Whether this is the default body type. For an operation named OpFoo, we
	// will not add suffixes like OpFooJSONBody for this one.
	Default bool

	// Contains encoding options for formdata
	Encoding map[string]RequestBodyEncoding
}

RequestBodyDefinition describes a request body

func (RequestBodyDefinition) CustomType

func (r RequestBodyDefinition) CustomType() bool

CustomType returns whether the body is a custom inline type, or pre-defined. This is poorly named, but it's here for compatibility reasons post-refactoring TODO: clean up the templates code, it can be simpler.

func (RequestBodyDefinition) IsFixedContentType

func (r RequestBodyDefinition) IsFixedContentType() bool

IsFixedContentType returns true if content type has fixed content type, i.e. contains no "*" symbol

func (RequestBodyDefinition) IsJSON

func (r RequestBodyDefinition) IsJSON() bool

IsJSON returns whether this is a JSON media type, for instance: - application/json - application/vnd.api+json - application/*+json

func (RequestBodyDefinition) IsSupported

func (r RequestBodyDefinition) IsSupported() bool

IsSupported returns true if we support this content type for server. Otherwise io.Reader will be generated

func (RequestBodyDefinition) IsSupportedByClient

func (r RequestBodyDefinition) IsSupportedByClient() bool

IsSupportedByClient returns true if we support this content type for client. Otherwise only generic method will ge generated

func (RequestBodyDefinition) Suffix

func (r RequestBodyDefinition) Suffix() string

When we're generating multiple functions which relate to request bodies, this generates the suffix. Such as Operation DoFoo would be suffixed with DoFooWithXMLBody.

func (RequestBodyDefinition) TypeDef

func (r RequestBodyDefinition) TypeDef(opID string) *TypeDefinition

TypeDef returns the Go type definition for a request body

type RequestBodyEncoding

type RequestBodyEncoding struct {
	ContentType string
	Style       string
	Explode     *bool
}

type ResolvedName added in v2.7.0

type ResolvedName struct {
	Schema    *GatheredSchema
	GoName    string // The resolved Go type name
	Candidate string // The initial candidate name before collision resolution
	Pinned    bool   // True if name came from x-go-name; must not be renamed
}

ResolvedName holds the final Go type name assigned to a gathered schema.

type ResponseContentDefinition

type ResponseContentDefinition struct {
	// This is the schema describing this content
	Schema Schema

	// This is the content type corresponding to the body, eg, application/json
	ContentType string

	// When we generate type names, we need a Tag for it, such as JSON, in
	// which case we will produce "Response200JSONContent".
	NameTag string
}

func (ResponseContentDefinition) HasFixedContentType

func (r ResponseContentDefinition) HasFixedContentType() bool

HasFixedContentType returns true if content type has fixed content type, i.e. contains no "*" symbol

func (ResponseContentDefinition) IsJSON

func (r ResponseContentDefinition) IsJSON() bool

IsJSON returns whether this is a JSON media type, for instance: - application/json - application/vnd.api+json - application/*+json

func (ResponseContentDefinition) IsStreamingContentType added in v2.7.0

func (r ResponseContentDefinition) IsStreamingContentType() bool

IsStreamingContentType reports whether this response's media type matches any configured streaming-content-types pattern (defaults merged with OutputOptions.StreamingContentTypes). Templates use this to emit a flush-per-chunk streaming path instead of a buffered io.Copy.

func (ResponseContentDefinition) IsSupported

func (r ResponseContentDefinition) IsSupported() bool

func (ResponseContentDefinition) NameTagOrContentType

func (r ResponseContentDefinition) NameTagOrContentType() string

func (ResponseContentDefinition) TypeDef

func (r ResponseContentDefinition) TypeDef(opID string, statusCode int) *TypeDefinition

TypeDef returns the Go type definition for a request body

type ResponseDefinition

type ResponseDefinition struct {
	StatusCode  string
	Description string
	Contents    []ResponseContentDefinition
	Headers     []ResponseHeaderDefinition
	Ref         string
}

func GenerateResponseDefinitions

func GenerateResponseDefinitions(operationID string, responses map[string]*openapi3.ResponseRef, pathItemRef string) ([]ResponseDefinition, error)

func (ResponseDefinition) GoName

func (r ResponseDefinition) GoName() string

func (ResponseDefinition) HasFixedStatusCode

func (r ResponseDefinition) HasFixedStatusCode() bool

func (ResponseDefinition) IsExternalRef

func (r ResponseDefinition) IsExternalRef() bool

func (ResponseDefinition) IsRef

func (r ResponseDefinition) IsRef() bool

type ResponseHeaderDefinition

type ResponseHeaderDefinition struct {
	Name     string
	GoName   string
	Schema   Schema
	Required bool
	Nullable bool
}

func (ResponseHeaderDefinition) GoTypeDef added in v2.7.0

func (h ResponseHeaderDefinition) GoTypeDef() string

GoTypeDef returns the Go type string for this header, applying pointer or nullable wrapping based on the Required/Nullable fields and global config.

func (ResponseHeaderDefinition) IsNullable added in v2.7.0

func (h ResponseHeaderDefinition) IsNullable() bool

IsNullable returns true if the header type uses nullable.Nullable[T] rather than a pointer for optionality.

func (ResponseHeaderDefinition) IsOptional added in v2.7.0

func (h ResponseHeaderDefinition) IsOptional() bool

IsOptional returns true if this header's Go type is indirect (pointer or nullable wrapper), meaning the template should guard before calling w.Header().Set(). This must stay in sync with GoTypeDef().

type ResponseTypeDefinition

type ResponseTypeDefinition struct {
	TypeDefinition
	// The content type name where this is used, eg, application/json
	ContentTypeName string

	// The type name of a response model.
	ResponseName string

	AdditionalTypeDefinitions []TypeDefinition
}

ResponseTypeDefinition is an extension of TypeDefinition, specifically for response unmarshaling in ClientWithResponses.

type Schema

type Schema struct {
	GoType  string // The Go type needed to represent the schema
	RefType string // If the type has a type name, this is set

	ArrayType *Schema // The schema of array element

	EnumValues map[string]string // Enum values

	Properties               []Property       // For an object, the fields with names
	HasAdditionalProperties  bool             // Whether we support additional properties
	AdditionalPropertiesType *Schema          // And if we do, their type
	AdditionalTypes          []TypeDefinition // We may need to generate auxiliary helper types, stored here

	SkipOptionalPointer bool // Some types don't need a * in front when they're optional

	Description string // The description of the element

	UnionElements []UnionElement // Possible elements of oneOf/anyOf union
	Discriminator *Discriminator // Describes which value is stored in a union

	// If this is set, the schema will declare a type via alias, eg,
	// `type Foo = bool`. If this is not set, we will define this type via
	// type definition `type Foo bool`
	//
	// Can be overriden by the OutputOptions#DisableTypeAliasesForType field
	DefineViaAlias bool

	// The original OpenAPIv3 Schema.
	OAPISchema *openapi3.Schema
}

Schema describes an OpenAPI schema, with lots of helper fields to use in the templating engine.

func GenerateGoSchema

func GenerateGoSchema(sref *openapi3.SchemaRef, path []string) (Schema, error)

func MergeSchemas

func MergeSchemas(allOf []*openapi3.SchemaRef, path []string) (Schema, error)

MergeSchemas merges all the fields in the schemas supplied into one giant schema. The idea is that we merge all fields together into one schema.

func (*Schema) AddProperty

func (s *Schema) AddProperty(p Property) error

AddProperty adds a new property to the current Schema, and returns an error if it collides. Two identical fields will not collide, but two properties by the same name, but different definition, will collide. It's safe to merge the fields of two schemas with overlapping properties if those properties are identical.

func (Schema) GetAdditionalTypeDefs

func (s Schema) GetAdditionalTypeDefs() []TypeDefinition

func (Schema) HasCustomMarshalJSON added in v2.7.0

func (s Schema) HasCustomMarshalJSON() bool

HasCustomMarshalJSON reports whether using this schema position as an underlying type of a named defined type (e.g. `type X Event` where Event is a oneOf union defined in components.schemas) would lose a custom MarshalJSON/UnmarshalJSON that we need to delegate to. This is true when the schema is a $ref to a oneOf/anyOf union defined elsewhere.

For *local* inline unions it is deliberately false: those are generated by emitting the union struct at this schema position, with its own MarshalJSON. The template's existing $hasUnionElements branch handles encoding by writing .union directly, so no delegation is needed.

For *external* inline unions (the response-root hoist set RefType to a type living in an imported package), the strict envelope is rendered as a defined type — `type X externalRef0.Y` — and methods on Y don't transfer. The .union shortcut also can't reach across packages. So we still need the MarshalJSON delegator here, even though UnionElements is non-empty.

func (Schema) IsExternalRef

func (s Schema) IsExternalRef() bool

func (Schema) IsPrimitive added in v2.7.0

func (s Schema) IsPrimitive() bool

IsPrimitive returns true if the schema represents a primitive OpenAPI type (string, integer, number, or boolean) as opposed to an object, array, or composed type.

func (Schema) IsRef

func (s Schema) IsRef() bool

func (Schema) TypeDecl

func (s Schema) TypeDecl() string

type SchemaContext added in v2.7.0

type SchemaContext int

SchemaContext identifies where in the OpenAPI document a schema was found.

const (
	ContextComponentSchema SchemaContext = iota
	ContextComponentParameter
	ContextComponentRequestBody
	ContextComponentResponse
	ContextComponentHeader
	ContextOperationParameter
	ContextOperationRequestBody
	ContextOperationResponse
	ContextClientResponseWrapper
)

func (SchemaContext) String added in v2.7.0

func (sc SchemaContext) String() string

String returns a human-readable name for the context.

func (SchemaContext) Suffix added in v2.7.0

func (sc SchemaContext) Suffix() string

Suffix returns the suffix to use for collision resolution.

type SchemaDescriptor

type SchemaDescriptor struct {
	Fields                   []FieldDescriptor
	HasAdditionalProperties  bool
	AdditionalPropertiesType string
}

SchemaDescriptor describes a Schema, a type definition.

type SchemaPath added in v2.7.0

type SchemaPath []string

SchemaPath represents the document location of a schema, e.g. ["components", "schemas", "Pet", "properties", "name"].

func (SchemaPath) String added in v2.7.0

func (sp SchemaPath) String() string

String returns the path joined with "/".

type SecurityDefinition

type SecurityDefinition struct {
	ProviderName string
	Scopes       []string
}

func DescribeSecurityDefinition

func DescribeSecurityDefinition(securityRequirements openapi3.SecurityRequirements) []SecurityDefinition

type ServerObjectDefinition added in v2.5.0

type ServerObjectDefinition struct {
	// GoName is the name of the variable for this Server URL
	GoName string

	// OAPISchema is the underlying OpenAPI representation of the Server
	OAPISchema *openapi3.Server
}

ServerObjectDefinition defines the definition of an OpenAPI Server object (https://spec.openapis.org/oas/v3.0.3#server-object) as it is provided to code generation in `oapi-codegen`

func (ServerObjectDefinition) EnumDefaultPointers added in v2.7.0

func (s ServerObjectDefinition) EnumDefaultPointers() []ServerURLDefaultPointer

EnumDefaultPointers returns one entry per enum-typed used variable with a `default` set. The template iterates this directly rather than recomputing identifier names from `$v.Default`.

func (ServerObjectDefinition) NewServerFunctionParams added in v2.7.0

func (s ServerObjectDefinition) NewServerFunctionParams() string

NewServerFunctionParams returns the formatted parameter list for the generated `New<ServerName>(...)` function — one typed parameter per declared-and-used variable, plus one `string` parameter per `{name}` placeholder that appears in the URL but isn't in `variables` (#2005). The two groups are sorted together alphabetically so the generated signature is deterministic.

Equivalent to calling `genServerURLWithVariablesFunctionParams` for the typed half and concatenating the undeclared half — but exposing it as a method keeps server-urls.tmpl free of that combination logic and means the template helper itself stayed at its pre-existing two-argument shape (so any user-supplied custom `server-urls.tmpl` override that calls the helper directly is unaffected).

func (ServerObjectDefinition) UndeclaredPlaceholders added in v2.7.0

func (s ServerObjectDefinition) UndeclaredPlaceholders() []string

UndeclaredPlaceholders returns the sorted list of `{name}` placeholder names that appear in OAPISchema.URL but have no corresponding entry in OAPISchema.Variables. The previous code generated a function that referenced only declared variables, so any undeclared placeholder remained in the URL after substitution and the trailing `{`/`}` runtime check tripped on every call — making the generated function permanently unusable (https://github.com/oapi-codegen/oapi-codegen/issues/2005). The template now adds these as plain `string` parameters so callers can fill them in directly.

func (ServerObjectDefinition) UsedVariables added in v2.7.0

func (s ServerObjectDefinition) UsedVariables() map[string]*openapi3.ServerVariable

UsedVariables returns the subset of OAPISchema.Variables whose `{name}` placeholder actually appears in OAPISchema.URL. Variables declared but unused are skipped — they would otherwise produce a type, constant, function parameter, and a no-op `strings.ReplaceAll` (https://github.com/oapi-codegen/oapi-codegen/issues/2004). Used by both server-urls.tmpl and BuildServerURLTypeDefinitions so that emitted types and the generated function signature stay in sync.

type ServerURLDefaultPointer added in v2.7.0

type ServerURLDefaultPointer struct {
	// VariableName is the OpenAPI variable name (for doc comments).
	VariableName string
	// TypeName is the enum's Go type, e.g. `ServerUrlFooBarVariable`.
	TypeName string
	// PointerName is the constant being declared. Normally it is
	// `<TypeName>Default` (matching the historical naming). Switches
	// to `<TypeName>DefaultValue` only when the variable's enum
	// contains a value whose identifier suffix is the literal string
	// "Default" — i.e. exactly the case that produced #2003's
	// duplicate-const compile error under the old codegen. Specs that
	// compiled cleanly before keep their `Default` name.
	PointerName string
	// TargetName is the fully-qualified enum-value constant that the
	// pointer references, e.g. `<TypeName>N443` or `<TypeName>Foo1`.
	TargetName string
	// Description is the variable's OpenAPI description (doc comment).
	Description string
}

ServerURLDefaultPointer carries the pre-computed identifier names needed to emit a typed default-pointer constant for an enum-typed server-URL variable. Computed in Go (not the template) so that the pointer's reference to the enum-value constant always agrees with the identifier the const-block actually emitted, including in dedup-suffix cases (e.g. `enum: ["foo", "FOO"]` with `default: "FOO"` → enum const is `<Prefix>Foo1`, pointer must reference exactly that).

type SimpleTypeSpec added in v2.6.0

type SimpleTypeSpec struct {
	Type   string `yaml:"type" json:"type"`
	Import string `yaml:"import,omitempty" json:"import,omitempty"`
}

SimpleTypeSpec defines the Go type for an OpenAPI type/format combination, along with any import required to use it.

type TypeDefinition

type TypeDefinition struct {
	// The name of the type, eg, type <...> Person
	TypeName string

	// The name of the corresponding JSON description, as it will sometimes
	// differ due to invalid characters.
	JsonName string

	// This is the Schema wrapper is used to populate the type description
	Schema Schema

	// ForceEnumPrefix, when true, forces the enum-value constants generated
	// from this TypeDefinition to be prefixed with the type name, regardless
	// of whether GenerateEnums detects a cross-enum conflict. Used for
	// synthesised enum types (e.g. server-URL variable enums) whose
	// generated identifiers must remain stable to avoid colliding with
	// other constants emitted alongside them.
	ForceEnumPrefix bool
}

TypeDefinition describes a Go type definition in generated code.

Let's use this example schema: components:

schemas:
  Person:
    type: object
    properties:
    name:
      type: string

func BuildServerURLTypeDefinitions added in v2.7.0

func BuildServerURLTypeDefinitions(spec *openapi3.T) ([]TypeDefinition, error)

BuildServerURLTypeDefinitions synthesizes a TypeDefinition for every server-URL variable that defines an `enum`. These are appended into the same TypeDefinition slices used by GenerateTypes (typedef.tmpl) and GenerateEnums (constants.tmpl), so that server-URL enum variables get the same `type X string`, `const ( … )` block, and `Valid()` method as any other enum-bearing schema. The server-urls.tmpl template no longer emits these declarations directly.

Variables without an `enum` are not handled here: server-urls.tmpl continues to emit their `type` and (optional) default constant inline, since the generic enum path has nothing to contribute for a non-enum string.

func GenerateParamsTypes

func GenerateParamsTypes(op OperationDefinition) []TypeDefinition

GenerateParamsTypes defines the schema for a parameters definition object which encapsulates all the query, header and cookie parameters for an operation.

func GenerateTypeDefsForOperation

func GenerateTypeDefsForOperation(op OperationDefinition) []TypeDefinition

func GenerateTypesForParameters

func GenerateTypesForParameters(t *template.Template, params map[string]*openapi3.ParameterRef) ([]TypeDefinition, error)

GenerateTypesForParameters generates type definitions for any custom types defined in the components/parameters section of the Swagger spec.

func GenerateTypesForRequestBodies

func GenerateTypesForRequestBodies(t *template.Template, bodies map[string]*openapi3.RequestBodyRef) ([]TypeDefinition, error)

GenerateTypesForRequestBodies generates type definitions for any custom types defined in the components/requestBodies section of the Swagger spec.

func GenerateTypesForResponses

func GenerateTypesForResponses(t *template.Template, responses openapi3.ResponseBodies) ([]TypeDefinition, error)

GenerateTypesForResponses generates type definitions for any custom types defined in the components/responses section of the Swagger spec.

func GenerateTypesForSchemas

func GenerateTypesForSchemas(t *template.Template, schemas map[string]*openapi3.SchemaRef, excludeSchemas []string) ([]TypeDefinition, error)

GenerateTypesForSchemas generates type definitions for any custom types defined in the components/schemas section of the Swagger spec.

func GenerateTypesForSecuritySchemes added in v2.7.0

func GenerateTypesForSecuritySchemes(t *template.Template, schemes map[string]*openapi3.SecuritySchemeRef) ([]TypeDefinition, error)

GenerateTypesForSecuritySchemes generates type definitions for any custom types defined in the components/securitySchemes section of the Swagger spec.

func (*TypeDefinition) IsAlias

func (t *TypeDefinition) IsAlias() bool

type TypeMapping added in v2.6.0

type TypeMapping struct {
	Integer FormatMapping `yaml:"integer,omitempty" json:"integer"`
	Number  FormatMapping `yaml:"number,omitempty" json:"number"`
	Boolean FormatMapping `yaml:"boolean,omitempty" json:"boolean"`
	String  FormatMapping `yaml:"string,omitempty" json:"string"`
}

TypeMapping defines the mapping from OpenAPI types to Go types.

func (TypeMapping) Merge added in v2.6.0

func (base TypeMapping) Merge(user TypeMapping) TypeMapping

Merge returns a new TypeMapping with user overrides applied on top of base.

type UnionElement

type UnionElement string

UnionElement describe union element, based on prefix externalRef\d+ and real ref name from external schema.

func (UnionElement) Method

func (u UnionElement) Method() string

Method generate union method name for template functions `As/From/Merge`.

func (UnionElement) String

func (u UnionElement) String() string

String returns externalRef\d+ and real ref name from external schema, like externalRef0.SomeType.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL