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 ¶
- Variables
- func DeprecationComment(reason string) string
- func EscapePathElements(path string) string
- func GenFieldsFromProperties(props []Property) []string
- func GenStructFromAllOf(allOf []*openapi3.SchemaRef, path []string) (string, error)
- func GenStructFromSchema(schema Schema) string
- func Generate(spec *openapi3.T, opts Configuration) (string, error)
- func GenerateAdditionalPropertyBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)
- func GenerateBodyDefinitions(operationID string, bodyOrRef *openapi3.RequestBodyRef, pathItemRef string) ([]RequestBodyDefinition, []TypeDefinition, error)
- func GenerateChiServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateClient(t *template.Template, ops []OperationDefinition) (string, error)
- func GenerateClientWithResponses(t *template.Template, ops []OperationDefinition) (string, error)
- func GenerateConstants(t *template.Template, ops []OperationDefinition) (string, error)
- func GenerateEcho5Server(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateEchoServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateEnums(t *template.Template, types []TypeDefinition) (string, error)
- func GenerateFiberServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateGinServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateGorillaServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateImports(t *template.Template, externalImports []string, packageName string, ...) (string, error)
- func GenerateInlinedSpec(t *template.Template, importMapping importMap, swagger *openapi3.T) (string, error)
- func GenerateIrisServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateServerURLs(t *template.Template, spec *openapi3.T) (string, error)
- func GenerateStdHTTPServer(t *template.Template, operations []OperationDefinition) (string, error)
- func GenerateStrictResponses(t *template.Template, responses []ResponseDefinition) (string, error)
- func GenerateStrictServer(t *template.Template, operations []OperationDefinition, opts Configuration) (string, error)
- func GenerateTemplates(templates []string, t *template.Template, ops any) (string, error)
- func GenerateTypeDefinitions(t *template.Template, swagger *openapi3.T, ops []OperationDefinition, ...) (string, error)
- func GenerateTypes(t *template.Template, types []TypeDefinition) (string, error)
- func GenerateTypesForOperations(t *template.Template, ops []OperationDefinition) (string, error)
- func GenerateUnionAndAdditionalProopertiesBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)
- func GenerateUnionBoilerplate(t *template.Template, typeDefs []TypeDefinition) (string, error)
- func GetParametersImports(params map[string]*openapi3.ParameterRef) (map[string]goImport, error)
- func GetRequestBodiesImports(bodies map[string]*openapi3.RequestBodyRef) (map[string]goImport, error)
- func GetResponsesImports(responses map[string]*openapi3.ResponseRef) (map[string]goImport, error)
- func GetSchemaImports(schemas map[string]*openapi3.SchemaRef, excludeSchemas []string) (map[string]goImport, error)
- func GetTypeDefinitionsImports(swagger *openapi3.T, excludeSchemas []string) (map[string]goImport, error)
- func GetUserTemplateText(inputData string) (template string, err error)
- func GoSchemaImports(schemas ...*openapi3.SchemaRef) (map[string]goImport, error)
- func IsGoIdentity(str string) bool
- func IsGoKeyword(str string) bool
- func IsGoTypeReference(ref string) bool
- func IsPredeclaredGoIdentifier(str string) bool
- func IsValidGoIdentity(str string) bool
- func IsWholeDocumentReference(ref string) bool
- func LoadTemplates(src embed.FS, t *template.Template) error
- func LowercaseFirstCharacter(str string) string
- func LowercaseFirstCharacters(str string) string
- func OperationImports(ops []OperationDefinition) (map[string]goImport, error)
- func OperationSchemaImports(s *Schema) (map[string]goImport, error)
- func OrderedParamsFromUri(uri string) []string
- func ParseGoImportExtension(v *openapi3.SchemaRef) (*goImport, error)
- func PathToTypeName(path []string) string
- func PropertiesEqual(a, b Property) bool
- func RefPathToGoType(refPath string) (string, error)
- func RefPathToObjName(refPath string) string
- func ReplacePathParamsWithStr(uri string) string
- func ResolveNames(schemas []*GatheredSchema) map[string]string
- func SanitizeCode(goCode string) string
- func SanitizeEnumNames(enumNames, enumValues []string) map[string]string
- func SanitizeGoIdentifier(str string) string
- func SanitizeGoIdentity(str string) string
- func SchemaHasAdditionalProperties(schema *openapi3.Schema) bool
- func SchemaNameToTypeName(name string) string
- func SetGlobalStateSpec(spec *openapi3.T)
- func SortedMapKeys[T any](m map[string]T) []string
- func SortedSchemaKeys(dict map[string]*openapi3.SchemaRef) []string
- func SortedSecuritySchemeKeys(dict map[string]*openapi3.SecuritySchemeRef) []string
- func StringToGoComment(in string) string
- func StringToGoString(in string) string
- func StringWithTypeNameToGoComment(in, typeName string) string
- func SwaggerUriToChiUri(uri string) string
- func SwaggerUriToEchoUri(uri string) string
- func SwaggerUriToFiberUri(uri string) string
- func SwaggerUriToGinUri(uri string) string
- func SwaggerUriToGorillaUri(uri string) string
- func SwaggerUriToIrisUri(uri string) string
- func SwaggerUriToStdHttpUri(uri string) string
- func ToCamelCase(str string) string
- func ToCamelCaseWithDigits(s string) string
- func ToCamelCaseWithInitialism(str string) string
- func ToCamelCaseWithInitialisms(s string) string
- func TypeDefinitionsEquivalent(t1, t2 TypeDefinition) bool
- func UppercaseFirstCharacter(str string) string
- func UppercaseFirstCharacterWithPkgName(str string) string
- type AdditionalImport
- type CompatibilityOptions
- type Configuration
- type Constants
- type Discriminator
- type EnumDefinition
- type FieldDescriptor
- type FormatMapping
- type GatheredSchema
- type GenerateOptions
- type NameNormalizer
- type NameNormalizerFunction
- type NameNormalizerMap
- type OperationDefinition
- func (o *OperationDefinition) AllParams() []ParameterDefinition
- func (o *OperationDefinition) GetResponseTypeDefinitions() ([]ResponseTypeDefinition, error)
- func (o *OperationDefinition) HandlerName() string
- func (o *OperationDefinition) HasBody() bool
- func (o *OperationDefinition) HasMaskedRequestContentTypes() bool
- func (o *OperationDefinition) MiddlewareKey() string
- func (o *OperationDefinition) Params() []ParameterDefinition
- func (o *OperationDefinition) RequiresParamObject() bool
- func (o *OperationDefinition) SummaryAsComment() string
- type OutputOptions
- type OutputOptionsOverlay
- type ParameterDefinition
- func CombineOperationParameters(globalParams []ParameterDefinition, localParams []ParameterDefinition) ([]ParameterDefinition, error)
- func DescribeParameters(params openapi3.Parameters, path []string) ([]ParameterDefinition, error)
- func FilterParameterDefinitionByType(params []ParameterDefinition, in string) []ParameterDefinition
- func SortParamsByPath(path string, in []ParameterDefinition) ([]ParameterDefinition, error)
- func (pd *ParameterDefinition) Explode() bool
- func (pd ParameterDefinition) GoName() string
- func (pd ParameterDefinition) GoVariableName() string
- func (pd ParameterDefinition) HasOptionalPointer() bool
- func (pd ParameterDefinition) IndirectOptional() booldeprecated
- func (pd *ParameterDefinition) IsJson() bool
- func (pd *ParameterDefinition) IsPassThrough() bool
- func (pd *ParameterDefinition) IsStyled() bool
- func (pd *ParameterDefinition) JsonTag() string
- func (pd ParameterDefinition) RequiresNilCheck() bool
- func (pd ParameterDefinition) SanitizedParamName() string
- func (pd *ParameterDefinition) SchemaFormat() string
- func (pd *ParameterDefinition) SchemaType() string
- func (pd *ParameterDefinition) Style() string
- func (pd ParameterDefinition) TypeDef() string
- func (pd ParameterDefinition) ZeroValueIsNil() bool
- type ParameterDefinitions
- type Property
- type RefWrapper
- type RequestBodyDefinition
- func (r RequestBodyDefinition) CustomType() bool
- func (r RequestBodyDefinition) IsFixedContentType() bool
- func (r RequestBodyDefinition) IsJSON() bool
- func (r RequestBodyDefinition) IsSupported() bool
- func (r RequestBodyDefinition) IsSupportedByClient() bool
- func (r RequestBodyDefinition) Suffix() string
- func (r RequestBodyDefinition) TypeDef(opID string) *TypeDefinition
- type RequestBodyEncoding
- type ResolvedName
- type ResponseContentDefinition
- func (r ResponseContentDefinition) HasFixedContentType() bool
- func (r ResponseContentDefinition) IsJSON() bool
- func (r ResponseContentDefinition) IsStreamingContentType() bool
- func (r ResponseContentDefinition) IsSupported() bool
- func (r ResponseContentDefinition) NameTagOrContentType() string
- func (r ResponseContentDefinition) TypeDef(opID string, statusCode int) *TypeDefinition
- type ResponseDefinition
- type ResponseHeaderDefinition
- type ResponseTypeDefinition
- type Schema
- type SchemaContext
- type SchemaDescriptor
- type SchemaPath
- type SecurityDefinition
- type ServerObjectDefinition
- type ServerURLDefaultPointer
- type SimpleTypeSpec
- type TypeDefinition
- func BuildServerURLTypeDefinitions(spec *openapi3.T) ([]TypeDefinition, error)
- func GenerateParamsTypes(op OperationDefinition) []TypeDefinition
- func GenerateTypeDefsForOperation(op OperationDefinition) []TypeDefinition
- func GenerateTypesForParameters(t *template.Template, params map[string]*openapi3.ParameterRef) ([]TypeDefinition, error)
- func GenerateTypesForRequestBodies(t *template.Template, bodies map[string]*openapi3.RequestBodyRef) ([]TypeDefinition, error)
- func GenerateTypesForResponses(t *template.Template, responses openapi3.ResponseBodies) ([]TypeDefinition, error)
- func GenerateTypesForSchemas(t *template.Template, schemas map[string]*openapi3.SchemaRef, ...) ([]TypeDefinition, error)
- func GenerateTypesForSecuritySchemes(t *template.Template, schemes map[string]*openapi3.SecuritySchemeRef) ([]TypeDefinition, error)
- type TypeMapping
- type UnionElement
Constants ¶
This section is empty.
Variables ¶
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.
var NameNormalizers = NameNormalizerMap{ NameNormalizerFunctionUnset: ToCamelCase, NameNormalizerFunctionToCamelCase: ToCamelCase, NameNormalizerFunctionToCamelCaseWithDigits: ToCamelCaseWithDigits, NameNormalizerFunctionToCamelCaseWithInitialisms: ToCamelCaseWithInitialisms, }
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.
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 EscapePathElements ¶
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 ¶
GenFieldsFromProperties produce corresponding field names with JSON annotations, given a list of schema descriptors
func GenStructFromAllOf ¶
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 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 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 ¶
GenerateTemplates used to generate templates
func GenerateTypeDefinitions ¶
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 GetUserTemplateText ¶
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 IsGoIdentity ¶
IsGoIdentity checks if the given string can be used as an identity in the generated code like a type name or constant name.
func IsGoKeyword ¶
IsGoKeyword returns whether the given string is a go keyword
func IsGoTypeReference ¶
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 ¶
IsPredeclaredGoIdentifier returns whether the given string is a predefined go identifier.
func IsValidGoIdentity ¶
IsValidGoIdentity checks if the given string can be used as a name of variable, constant, or type.
func IsWholeDocumentReference ¶
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 ¶
LoadTemplates loads all of our template files into a text/template. The path of template is relative to the templates directory.
func LowercaseFirstCharacter ¶
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 ¶
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 OrderedParamsFromUri ¶
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 PathToTypeName ¶
PathToTypeName converts a path, like Object/field1/nestedField into a go type name.
func PropertiesEqual ¶
func RefPathToGoType ¶
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 ¶
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 ¶
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 ¶
SanitizeCode runs sanitizers across the generated Go code to ensure the generated code will be able to compile.
func SanitizeEnumNames ¶
SanitizeEnumNames fixes illegal chars in the enum names and removes duplicates
func SanitizeGoIdentifier ¶ added in v2.7.0
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 ¶
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 ¶
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 ¶
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 SortedMapKeys ¶
SortedMapKeys takes a map with keys of type string and returns a slice of those keys sorted lexicographically.
func SortedSchemaKeys ¶
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 ¶
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
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ¶
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 ToCamelCaseWithInitialisms ¶
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 ¶
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 ¶
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 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 ¶
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 ¶
func (o *OperationDefinition) Params() []ParameterDefinition
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 (Property) HasOptionalPointer ¶ added in v2.5.0
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
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
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 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 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 MergeSchemas ¶
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 ¶
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
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 (Schema) IsPrimitive ¶ added in v2.7.0
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.
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 ¶
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.