generator

package
v0.0.0-...-1fb28bd Latest Latest
Warning

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

Go to latest
Published: Jul 29, 2024 License: Apache-2.0 Imports: 38 Imported by: 0

Documentation

Overview

Package generator provides the code generation library for go-swagger.

Generating data types

The general idea is that you should rarely see interface{} in the generated code. You get a complete representation of a swagger document in somewhat idiomatic go.

To do so, there is a set of mapping patterns that are applied, to map a Swagger specification to go types:

   definition of primitive   => type alias/name
   definition of array       => type alias/name
   definition of map         => type alias/name

   definition of object
   with properties           => struct
   definition of $ref        => type alias/name

   object with only
   additional properties     => map[string]T

   object with additional
   properties and properties => custom serializer

   schema with schema array
   in items                  => tuple (struct with properties, custom serializer)

   schema with all of        => struct

     * allOf schema with $ref        => embedded value
     * allOf schema with properties  => properties are included in struct
     * adding an allOf schema with just "x-isnullable": true or
	   "x-nullable": true turns the schema into a pointer when
	   there are only other extension properties provided

NOTE: anyOf and oneOf JSON-schema constructs are not supported by Swagger 2.0

A property on a definition is a pointer when any one of the following conditions is met:

    it is an object schema (struct)
    it has x-nullable or x-isnullable as vendor extension
    it is a primitive where the zero value is valid but would fail validation
	otherwise strings minLength > 0 or required results in non-pointer
    numbers min > 0, max < 0 and min < max

JSONSchema and by extension Swagger allow for items that have a fixed size array, with the schema describing the items at each index. This can be combined with additional items to form some kind of tuple with varargs.

To map this to go it creates a struct that has fixed names and a custom json serializer.

NOTE: the additionalItems keyword is not supported by Swagger 2.0. However, the generator and validator parts in go-swagger do.

Documenting the generated code

The code that is generated also gets the doc comments that are used by the scanner to generate a spec from go code. So that after generation you should be able to reverse generate a spec from the code that was generated by your spec.

It should be equivalent to the original spec but might miss some default values and examples.

Index

Constants

This section is empty.

Variables

View Source
var (
	// Debug when the env var DEBUG or SWAGGER_DEBUG is not empty
	// the generators will be very noisy about what they are doing
	Debug = os.Getenv("DEBUG") != "" || os.Getenv("SWAGGER_DEBUG") != ""
)
View Source
var (
	// DefaultLanguageFunc defines the default generation language
	DefaultLanguageFunc func() *LanguageOpts
)
View Source
var (

	// FuncMapFunc yields a map with all functions for templates
	FuncMapFunc func(*LanguageOpts) template.FuncMap
)

Functions

func AddFile

func AddFile(name, data string) error

AddFile adds a file to the default repository. It will create a new template based on the filename. It trims the .gotmpl from the end and converts the name using swag.ToJSONName. This will strip directory separators and Camelcase the next letter. e.g validation/primitive.gotmpl will become validationPrimitive

If the file contains a definition for a template that is protected the whole file will not be added

func Asset

func Asset(name string) ([]byte, error)

Asset loads and returns the asset for the given name. It returns an error if the asset could not be found or could not be loaded.

func AssetNames

func AssetNames() []string

AssetNames returns the names of the assets.

func BytesToYAMLv2Doc

func BytesToYAMLv2Doc(data []byte) (interface{}, error)

BytesToYAMLDoc converts a byte slice into a YAML document

func DefaultFuncMap

func DefaultFuncMap(lang *LanguageOpts) template.FuncMap

DefaultFuncMap yields a map with default functions for use in the templates. These are available in every template

func DefaultSectionOpts

func DefaultSectionOpts(gen *GenOpts)

DefaultSectionOpts for a given opts, this is used when no config file is passed and uses the embedded templates when no local override can be found

func GenerateClient

func GenerateClient(name string, modelNames, operationIDs []string, opts *GenOpts) error

GenerateClient generates a client library for a swagger spec document.

func GenerateDefinition

func GenerateDefinition(modelNames []string, opts *GenOpts) error

GenerateDefinition generates a single model file for some schema definitions

func GenerateMarkdown

func GenerateMarkdown(output string, modelNames, operationIDs []string, opts *GenOpts) error

GenerateMarkdown documentation for a swagger specification

func GenerateModels

func GenerateModels(modelNames []string, opts *GenOpts) error

GenerateModels generates all model files for some schema definitions

func GenerateServer

func GenerateServer(name string, modelNames, operationIDs []string, opts *GenOpts) error

GenerateServer generates a server application

func GenerateServerOperation

func GenerateServerOperation(operationNames []string, opts *GenOpts) error

GenerateServerOperation generates a parameter model, parameter validator, http handler implementations for a given operation.

It also generates an operation handler interface that uses the parameter model for handling a valid request. Allows for specifying a list of tags to include only certain tags for the generation

func GenerateSupport

func GenerateSupport(name string, modelNames, operationIDs []string, opts *GenOpts) error

GenerateSupport generates the supporting files for an API

func MarkdownSectionOpts

func MarkdownSectionOpts(gen *GenOpts, output string)

MarkdownSectionOpts for a given opts and output file.

func MustAsset

func MustAsset(name string) []byte

MustAsset is like Asset but panics when Asset would return an error. It simplifies safe initialization of global variables.

func ReadConfig

func ReadConfig(fpath string) (*viper.Viper, error)

ReadConfig at the specified path, when no path is specified it will look into the current directory and load a .swagger.{yml,json,hcl,toml,properties} file Returns a viper config or an error

func WithAutoXOrder

func WithAutoXOrder(specPath string) string

WithAutoXOrder amends the spec to specify property order as they appear in the spec (supports yaml documents only).

Types

type GenApp

type GenApp struct {
	GenCommon
	APIPackage                 string
	ServerPackageAlias         string
	ImplementationPackageAlias string
	APIPackageAlias            string
	Package                    string
	ReceiverName               string
	Name                       string
	Principal                  string
	PrincipalIsNullable        bool
	DefaultConsumes            string
	DefaultProduces            string
	Host                       string
	BasePath                   string
	Info                       *spec.Info
	ExternalDocs               *spec.ExternalDocumentation
	Tags                       []spec.Tag
	Imports                    map[string]string
	DefaultImports             map[string]string
	Schemes                    []string
	ExtraSchemes               []string
	Consumes                   GenSerGroups
	Produces                   GenSerGroups
	SecurityDefinitions        GenSecuritySchemes
	SecurityRequirements       []analysis.SecurityRequirement // original security requirements as per the spec (for doc)
	Models                     []GenDefinition
	Operations                 GenOperations
	OperationGroups            GenOperationGroups
	SwaggerJSON                string
	// Embedded specs: this is important for when the generated server adds routes.
	// NOTE: there is a distinct advantage to having this in runtime rather than generated code.
	// We are not ever going to generate the router.
	// If embedding spec is an issue (e.g. memory usage), this can be excluded with the --exclude-spec
	// generation option. Alternative methods to serve spec (e.g. from disk, ...) may be implemented by
	// adding a middleware to the generated API.
	FlatSwaggerJSON string
	ExcludeSpec     bool
	GenOpts         *GenOpts
}

GenApp represents all the meta data needed to generate an application from a swagger spec

func (*GenApp) UseFlags

func (g *GenApp) UseFlags() bool

UseFlags returns true when the flag strategy is set to flag

func (*GenApp) UseGoStructFlags

func (g *GenApp) UseGoStructFlags() bool

UseGoStructFlags returns true when no strategy is specified or it is set to "go-flags"

func (*GenApp) UseModernMode

func (g *GenApp) UseModernMode() bool

UseModernMode for https://wiki.mozilla.org/Security/Server_Side_TLS#Modern_compatibility

func (*GenApp) UsePFlags

func (g *GenApp) UsePFlags() bool

UsePFlags returns true when the flag strategy is set to pflag

type GenClientOptions

type GenClientOptions struct {
	ProducesMediaTypes []string // filled with all producers if any method as more than 1
	ConsumesMediaTypes []string // filled with all consumers if any method as more than 1
}

GenClientOptions holds extra pieces of information to generate a client.

type GenCommon

type GenCommon struct {
	Copyright        string
	TargetImportPath string
	RootedErrorPath  bool // wants array and map types to have a path corresponding to their type in reported errors
}

GenCommon contains common properties needed across definitions, app and operations TargetImportPath may be used by templates to import other (possibly generated) packages in the generation path (e.g. relative to GOPATH). TargetImportPath is NOT used by standard templates.

type GenDefinition

type GenDefinition struct {
	GenCommon
	GenSchema
	Package        string
	Imports        map[string]string
	DefaultImports map[string]string
	ExtraSchemas   GenSchemaList
	DependsOn      []string
	External       bool
}

GenDefinition contains all the properties to generate a definition from a swagger spec

func (GenDefinition) Zero

func (rt GenDefinition) Zero() string

Zero returns an initializer for the type

type GenDefinitions

type GenDefinitions []GenDefinition

GenDefinitions represents a list of operations to generate this implements a sort by operation id

func (GenDefinitions) Len

func (g GenDefinitions) Len() int

func (GenDefinitions) Less

func (g GenDefinitions) Less(i, j int) bool

func (GenDefinitions) Swap

func (g GenDefinitions) Swap(i, j int)

type GenHeader

type GenHeader struct {
	Package      string
	ReceiverName string
	IndexVar     string

	ID              string
	Name            string
	Path            string
	ValueExpression string

	Title       string
	Description string
	Default     interface{}
	HasDefault  bool

	CollectionFormat string

	Child  *GenItems
	Parent *GenItems

	Converter string
	Formatter string

	ZeroValue string
	// contains filtered or unexported fields
}

GenHeader represents a header on a response for code generation

func (*GenHeader) ItemsDepth

func (h *GenHeader) ItemsDepth() string

ItemsDepth returns a string "items.items..." with as many items as the level of nesting of the array. For a header objects it always returns "".

func (GenHeader) ToString

func (h GenHeader) ToString() string

ToString returns a string conversion expression for the header

func (GenHeader) Zero

func (rt GenHeader) Zero() string

Zero returns an initializer for the type

type GenHeaders

type GenHeaders []GenHeader

GenHeaders is a sorted collection of headers for codegen

func (GenHeaders) HasSomeDefaults

func (g GenHeaders) HasSomeDefaults() bool

HasSomeDefaults returns true is at least one header has a default value set

func (GenHeaders) Len

func (g GenHeaders) Len() int

func (GenHeaders) Less

func (g GenHeaders) Less(i, j int) bool

func (GenHeaders) Swap

func (g GenHeaders) Swap(i, j int)

type GenItems

type GenItems struct {
	Name             string
	Path             string
	ValueExpression  string
	CollectionFormat string
	Child            *GenItems
	Parent           *GenItems
	Converter        string
	Formatter        string

	Location string
	IndexVar string
	KeyVar   string

	// instructs generator to skip the splitting and parsing from CollectionFormat
	SkipParse bool
	// instructs generator that some nested structure needs an higher level loop index
	NeedsIndex bool
	// contains filtered or unexported fields
}

GenItems represents the collection items for a collection parameter

func (*GenItems) ItemsDepth

func (g *GenItems) ItemsDepth() string

ItemsDepth returns a string "items.items..." with as many items as the level of nesting of the array.

func (GenItems) ToString

func (g GenItems) ToString() string

ToString returns a string conversion expression for the item

func (GenItems) UnderlyingType

func (g GenItems) UnderlyingType() string

UnderlyingType tells the go type or the aliased go type

func (GenItems) Zero

func (rt GenItems) Zero() string

Zero returns an initializer for the type

type GenOperation

type GenOperation struct {
	GenCommon
	Package      string
	ReceiverName string
	Name         string
	Summary      string
	Description  string
	Method       string
	Path         string
	BasePath     string
	Tags         []string
	UseTags      bool
	RootPackage  string

	Imports        map[string]string
	DefaultImports map[string]string
	ExtraSchemas   GenSchemaList
	PackageAlias   string

	Authorized           bool
	Security             []GenSecurityRequirements // resolved security requirements for the operation
	SecurityDefinitions  GenSecuritySchemes
	SecurityRequirements []analysis.SecurityRequirement // original security requirements as per the spec (for doc)
	Principal            string
	PrincipalIsNullable  bool

	SuccessResponse  *GenResponse
	SuccessResponses []GenResponse
	Responses        GenStatusCodeResponses
	DefaultResponse  *GenResponse

	Params               GenParameters
	QueryParams          GenParameters
	PathParams           GenParameters
	HeaderParams         GenParameters
	FormParams           GenParameters
	HasQueryParams       bool
	HasPathParams        bool
	HasHeaderParams      bool
	HasFormParams        bool
	HasFormValueParams   bool
	HasFileParams        bool
	HasBodyParams        bool
	HasStreamingResponse bool

	Schemes              []string
	ExtraSchemes         []string
	SchemeOverrides      []string // original scheme overrides for operation, as per spec (for doc)
	ExtraSchemeOverrides []string // original extra scheme overrides for operation, as per spec (for doc)
	ProducesMediaTypes   []string
	ConsumesMediaTypes   []string
	TimeoutName          string

	Extensions map[string]interface{}

	StrictResponders bool
	ExternalDocs     *spec.ExternalDocumentation
	Produces         []string // original produces for operation (for doc)
	Consumes         []string // original consumes for operation (for doc)
}

GenOperation represents an operation for code generation

type GenOperationGroup

type GenOperationGroup struct {
	GenCommon
	Name       string
	Operations GenOperations

	Summary        string
	Description    string
	Imports        map[string]string
	DefaultImports map[string]string
	RootPackage    string
	GenOpts        *GenOpts
	PackageAlias   string

	ClientOptions *GenClientOptions
}

GenOperationGroup represents a named (tagged) group of operations

type GenOperationGroups

type GenOperationGroups []GenOperationGroup

GenOperationGroups is a sorted collection of operation groups

func (GenOperationGroups) Len

func (g GenOperationGroups) Len() int

func (GenOperationGroups) Less

func (g GenOperationGroups) Less(i, j int) bool

func (GenOperationGroups) Swap

func (g GenOperationGroups) Swap(i, j int)

type GenOperations

type GenOperations []GenOperation

GenOperations represents a list of operations to generate this implements a sort by operation id

func (GenOperations) Len

func (g GenOperations) Len() int

func (GenOperations) Less

func (g GenOperations) Less(i, j int) bool

func (GenOperations) Swap

func (g GenOperations) Swap(i, j int)

type GenOpts

type GenOpts struct {
	GenOptsCommon
	TemplatePlugin string
}

func (*GenOpts) CheckOpts

func (g *GenOpts) CheckOpts() error

CheckOpts carries out some global consistency checks on options.

func (*GenOpts) EnsureDefaults

func (g *GenOpts) EnsureDefaults() error

EnsureDefaults for these gen opts

func (*GenOpts) PrincipalAlias

func (g *GenOpts) PrincipalAlias() string

PrincipalAlias returns an aliased type to the principal

func (*GenOpts) PrincipalIsNullable

func (g *GenOpts) PrincipalIsNullable() bool

PrincipalIsNullable indicates whether the principal type used for authentication may be used as a pointer

func (*GenOpts) SpecPath

func (g *GenOpts) SpecPath() string

SpecPath returns the path to the spec relative to the server package. If the spec is remote keep this absolute location.

If spec is not relative to server (e.g. lives on a different drive on windows), then the resolved path is absolute.

This method is used by templates, e.g. with {{ .SpecPath }}

Errors cases are prevented by calling CheckOpts beforehand.

func (*GenOpts) TargetPath

func (g *GenOpts) TargetPath() string

TargetPath returns the target generation path relative to the server package. This method is used by templates, e.g. with {{ .TargetPath }}

Errors cases are prevented by calling CheckOpts beforehand.

Example: Target: ${PWD}/tmp ServerPackage: abc/efg

Server is generated in ${PWD}/tmp/abc/efg relative TargetPath returned: ../../../tmp

type GenOptsCommon

type GenOptsCommon struct {
	IncludeModel      bool
	IncludeValidator  bool
	IncludeHandler    bool
	IncludeParameters bool
	IncludeResponses  bool
	IncludeURLBuilder bool
	IncludeMain       bool
	IncludeSupport    bool
	IncludeCLi        bool
	ExcludeSpec       bool
	DumpData          bool
	ValidateSpec      bool
	FlattenOpts       *analysis.FlattenOpts
	IsClient          bool

	PropertiesSpecOrder        bool
	StrictAdditionalProperties bool
	AllowTemplateOverride      bool

	Spec                   string
	APIPackage             string
	ModelPackage           string
	ServerPackage          string
	ClientPackage          string
	CliPackage             string
	CliAppName             string // name of cli app. For example "dockerctl"
	ImplementationPackage  string
	Principal              string
	PrincipalCustomIface   bool   // user-provided interface for Principal (non-nullable)
	Target                 string // dir location where generated code is written to
	Sections               SectionOpts
	LanguageOpts           *LanguageOpts
	TypeMapping            map[string]string
	Imports                map[string]string
	DefaultScheme          string
	DefaultProduces        string
	DefaultConsumes        string
	WithXML                bool
	TemplateDir            string
	Template               string
	RegenerateConfigureAPI bool
	Operations             []string
	Models                 []string
	Tags                   []string
	StructTags             []string
	Name                   string
	FlagStrategy           string
	CompatibilityMode      string
	ExistingModels         string
	Copyright              string
	SkipTagPackages        bool
	MainPackage            string
	IgnoreOperations       bool
	AllowEnumCI            bool
	StrictResponders       bool
	AcceptDefinitionsOnly  bool
	WantsRootedErrorPath   bool
	// contains filtered or unexported fields
}

GenOptsCommon the options for the generator

type GenParameter

type GenParameter struct {
	ID              string
	Name            string
	ModelsPackage   string
	Path            string
	ValueExpression string
	IndexVar        string
	KeyVar          string
	ReceiverName    string
	Location        string
	Title           string
	Description     string
	Converter       string
	Formatter       string

	Schema *GenSchema

	CollectionFormat string

	CustomTag string

	Child  *GenItems
	Parent *GenItems

	Default         interface{}
	HasDefault      bool
	ZeroValue       string
	AllowEmptyValue bool

	// validation strategy for Body params, which may mix model and simple constructs.
	// Distinguish the following cases:
	// - HasSimpleBodyParams: body is an inline simple type
	// - HasModelBodyParams: body is a model objectd
	// - HasSimpleBodyItems: body is an inline array of simple type
	// - HasModelBodyItems: body is an array of model objects
	// - HasSimpleBodyMap: body is a map of simple objects (possibly arrays)
	// - HasModelBodyMap: body is a map of model objects
	HasSimpleBodyParams bool
	HasModelBodyParams  bool
	HasSimpleBodyItems  bool
	HasModelBodyItems   bool
	HasSimpleBodyMap    bool
	HasModelBodyMap     bool

	Extensions map[string]interface{}
	// contains filtered or unexported fields
}

GenParameter is used to represent a parameter or a header for code generation.

func (*GenParameter) IsBodyParam

func (g *GenParameter) IsBodyParam() bool

IsBodyParam returns true when this parameter is a body param

func (*GenParameter) IsFileParam

func (g *GenParameter) IsFileParam() bool

IsFileParam returns true when this parameter is a file param

func (*GenParameter) IsFormParam

func (g *GenParameter) IsFormParam() bool

IsFormParam returns true when this parameter is a form param

func (*GenParameter) IsHeaderParam

func (g *GenParameter) IsHeaderParam() bool

IsHeaderParam returns true when this parameter is a header param

func (*GenParameter) IsPathParam

func (g *GenParameter) IsPathParam() bool

IsPathParam returns true when this parameter is a path param

func (*GenParameter) IsQueryParam

func (g *GenParameter) IsQueryParam() bool

IsQueryParam returns true when this parameter is a query param

func (*GenParameter) ItemsDepth

func (g *GenParameter) ItemsDepth() string

ItemsDepth returns a string "items.items..." with as many items as the level of nesting of the array. For a parameter object, it always returns "".

func (GenParameter) ToString

func (g GenParameter) ToString() string

ToString returns a string conversion expression for the parameter

func (GenParameter) UnderlyingType

func (g GenParameter) UnderlyingType() string

UnderlyingType tells the go type or the aliased go type

func (GenParameter) Zero

func (rt GenParameter) Zero() string

Zero returns an initializer for the type

type GenParameters

type GenParameters []GenParameter

GenParameters represents a sorted parameter collection

func (GenParameters) HasSomeDefaults

func (g GenParameters) HasSomeDefaults() bool

HasSomeDefaults returns true is at least one parameter has a default value set

func (GenParameters) Len

func (g GenParameters) Len() int

func (GenParameters) Less

func (g GenParameters) Less(i, j int) bool

func (GenParameters) Swap

func (g GenParameters) Swap(i, j int)

type GenResponse

type GenResponse struct {
	Package       string
	ModelsPackage string
	ReceiverName  string
	Name          string
	Description   string

	IsSuccess bool

	Code               int
	Method             string
	Path               string
	Headers            GenHeaders
	Schema             *GenSchema
	AllowsForStreaming bool

	Imports        map[string]string
	DefaultImports map[string]string

	Extensions map[string]interface{}

	StrictResponders bool
	OperationName    string
	Examples         GenResponseExamples
}

GenResponse represents a response object for code generation

type GenResponseExample

type GenResponseExample struct {
	MediaType string
	Example   interface{}
}

GenResponseExample captures an example provided for a response for some mime type

type GenResponseExamples

type GenResponseExamples []GenResponseExample

GenResponseExamples is a sortable collection []GenResponseExample

func (GenResponseExamples) Len

func (g GenResponseExamples) Len() int

func (GenResponseExamples) Less

func (g GenResponseExamples) Less(i, j int) bool

func (GenResponseExamples) Swap

func (g GenResponseExamples) Swap(i, j int)

type GenSchema

type GenSchema struct {
	Example                    string
	OriginalName               string
	Name                       string
	Suffix                     string
	Path                       string
	ValueExpression            string
	IndexVar                   string
	KeyVar                     string
	Title                      string
	Description                string
	Location                   string
	ReceiverName               string
	Items                      *GenSchema
	AllowsAdditionalItems      bool
	HasAdditionalItems         bool
	AdditionalItems            *GenSchema
	Object                     *GenSchema
	XMLName                    string
	CustomTag                  string
	Properties                 GenSchemaList
	AllOf                      GenSchemaList
	HasAdditionalProperties    bool
	IsAdditionalProperties     bool
	AdditionalProperties       *GenSchema
	StrictAdditionalProperties bool
	ReadOnly                   bool
	IsVirtual                  bool
	IsBaseType                 bool
	HasBaseType                bool
	IsSubType                  bool
	IsExported                 bool
	IsElem                     bool // IsElem gives some context when the schema is part of an array or a map
	IsProperty                 bool // IsProperty gives some context when the schema is a property of an object
	DiscriminatorField         string
	DiscriminatorValue         string
	Discriminates              map[string]string
	Parents                    []string
	IncludeValidator           bool
	IncludeModel               bool
	Default                    interface{}
	WantsMarshalBinary         bool // do we generate MarshalBinary interface?
	StructTags                 []string
	ExtraImports               map[string]string // non-standard imports detected when using external types
	ExternalDocs               *spec.ExternalDocumentation
	WantsRootedErrorPath       bool
	// contains filtered or unexported fields
}

GenSchema contains all the information needed to generate the code for a schema

func (GenSchema) PrintTags

func (g GenSchema) PrintTags() string

PrintTags takes care of rendering tags for a struct field

func (GenSchema) ToString

func (g GenSchema) ToString() string

ToString returns a string conversion expression for the schema

func (GenSchema) UnderlyingType

func (g GenSchema) UnderlyingType() string

UnderlyingType tells the go type or the aliased go type

func (GenSchema) Zero

func (rt GenSchema) Zero() string

Zero returns an initializer for the type

type GenSchemaList

type GenSchemaList []GenSchema

GenSchemaList is a list of schemas for generation.

It can be sorted by name to get a stable struct layout for version control and such

func (GenSchemaList) Len

func (g GenSchemaList) Len() int

func (GenSchemaList) Less

func (g GenSchemaList) Less(i, j int) bool

func (GenSchemaList) Swap

func (g GenSchemaList) Swap(i, j int)

type GenSecurityRequirement

type GenSecurityRequirement struct {
	Name   string
	Scopes []string
}

GenSecurityRequirement represents a security requirement for an operation

type GenSecurityRequirements

type GenSecurityRequirements []GenSecurityRequirement

GenSecurityRequirements represents a compounded security requirement specification. In a []GenSecurityRequirements complete requirements specification, outer elements are interpreted as optional requirements (OR), and inner elements are interpreted as jointly required (AND).

func (GenSecurityRequirements) Len

func (g GenSecurityRequirements) Len() int

func (GenSecurityRequirements) Less

func (g GenSecurityRequirements) Less(i, j int) bool

func (GenSecurityRequirements) Swap

func (g GenSecurityRequirements) Swap(i, j int)

type GenSecurityScheme

type GenSecurityScheme struct {
	AppName             string
	ID                  string
	Name                string
	ReceiverName        string
	IsBasicAuth         bool
	IsAPIKeyAuth        bool
	IsOAuth2            bool
	Scopes              []string
	Source              string
	Principal           string
	PrincipalIsNullable bool

	// from spec.SecurityScheme
	Description      string
	Type             string
	In               string
	Flow             string
	AuthorizationURL string
	TokenURL         string
	Extensions       map[string]interface{}
	ScopesDesc       []GenSecurityScope
}

GenSecurityScheme represents a security scheme for code generation

type GenSecuritySchemes

type GenSecuritySchemes []GenSecurityScheme

GenSecuritySchemes sorted representation of serializers

func (GenSecuritySchemes) Len

func (g GenSecuritySchemes) Len() int

func (GenSecuritySchemes) Less

func (g GenSecuritySchemes) Less(i, j int) bool

func (GenSecuritySchemes) Swap

func (g GenSecuritySchemes) Swap(i, j int)

type GenSecurityScope

type GenSecurityScope struct {
	Name        string
	Description string
}

GenSecurityScope represents a scope descriptor for an OAuth2 security scheme

type GenSerGroup

type GenSerGroup struct {
	GenSerializer

	// All media types for this serializer. The redundant representation allows for easier use in templates
	AllSerializers GenSerializers
}

GenSerGroup represents a group of serializers: this links a serializer to a list of prioritized media types (mime).

type GenSerGroups

type GenSerGroups []GenSerGroup

GenSerGroups sorted representation of serializer groups

func (GenSerGroups) Len

func (g GenSerGroups) Len() int

func (GenSerGroups) Less

func (g GenSerGroups) Less(i, j int) bool

func (GenSerGroups) Swap

func (g GenSerGroups) Swap(i, j int)

type GenSerializer

type GenSerializer struct {
	AppName        string // Application name
	ReceiverName   string
	Name           string   // Name of the Producer/Consumer (e.g. json, yaml, txt, bin)
	MediaType      string   // mime
	Implementation string   // func implementing the Producer/Consumer
	Parameters     []string // parameters supported by this serializer
}

GenSerializer represents a single serializer for a particular media type

type GenSerializers

type GenSerializers []GenSerializer

GenSerializers sorted representation of serializers

func (GenSerializers) Len

func (g GenSerializers) Len() int

func (GenSerializers) Less

func (g GenSerializers) Less(i, j int) bool

func (GenSerializers) Swap

func (g GenSerializers) Swap(i, j int)

type GenStatusCodeResponses

type GenStatusCodeResponses []GenResponse

GenStatusCodeResponses a container for status code responses

func (GenStatusCodeResponses) Len

func (g GenStatusCodeResponses) Len() int

func (GenStatusCodeResponses) Less

func (g GenStatusCodeResponses) Less(i, j int) bool

func (GenStatusCodeResponses) MarshalJSON

func (g GenStatusCodeResponses) MarshalJSON() ([]byte, error)

MarshalJSON marshals these responses to json

This is used by DumpData.

func (GenStatusCodeResponses) Swap

func (g GenStatusCodeResponses) Swap(i, j int)

func (*GenStatusCodeResponses) UnmarshalJSON

func (g *GenStatusCodeResponses) UnmarshalJSON(data []byte) error

UnmarshalJSON unmarshals this GenStatusCodeResponses from json

type LanguageConfig

type LanguageConfig map[string]LanguageDefinition

LanguageConfig structure that is obtained from parsing a config file

type LanguageDefinition

type LanguageDefinition struct {
	Layout SectionOpts `mapstructure:"layout"`
}

LanguageDefinition in the configuration file.

func (*LanguageDefinition) ConfigureOpts

func (d *LanguageDefinition) ConfigureOpts(opts *GenOpts) error

ConfigureOpts for generation

type LanguageOpts

type LanguageOpts struct {
	ReservedWords        []string
	BaseImportFunc       func(string) string               `json:"-"`
	ImportsFunc          func(map[string]string) string    `json:"-"`
	ArrayInitializerFunc func(interface{}) (string, error) `json:"-"`
	// contains filtered or unexported fields
}

LanguageOpts to describe a language to the code generator

func GoLangOpts

func GoLangOpts() *LanguageOpts

GoLangOpts for rendering items as golang code

func MarkdownOpts

func MarkdownOpts() *LanguageOpts

MarkdownOpts for rendering a spec as markdown

func (*LanguageOpts) FormatContent

func (l *LanguageOpts) FormatContent(name string, content []byte) ([]byte, error)

FormatContent formats a file with a language specific formatter

func (*LanguageOpts) Init

func (l *LanguageOpts) Init()

Init the language option

func (*LanguageOpts) MangleFileName

func (l *LanguageOpts) MangleFileName(name string) string

MangleFileName makes sure a file name gets a safe name

func (*LanguageOpts) MangleName

func (l *LanguageOpts) MangleName(name, suffix string) string

MangleName makes sure a reserved word gets a safe name

func (*LanguageOpts) ManglePackageName

func (l *LanguageOpts) ManglePackageName(name, suffix string) string

ManglePackageName makes sure a package gets a safe name. In case of a file system path (e.g. name contains "/" or "\" on Windows), this return only the last element.

func (*LanguageOpts) ManglePackagePath

func (l *LanguageOpts) ManglePackagePath(name string, suffix string) string

ManglePackagePath makes sure a full package path gets a safe name. Only the last part of the path is altered.

func (*LanguageOpts) MangleVarName

func (l *LanguageOpts) MangleVarName(name string) string

MangleVarName makes sure a reserved word gets a safe name

type Repository

type Repository struct {
	// contains filtered or unexported fields
}

Repository is the repository for the generator templates

func NewRepository

func NewRepository(funcs template.FuncMap) *Repository

NewRepository creates a new template repository with the provided functions defined

func (*Repository) AddFile

func (t *Repository) AddFile(name, data string) error

AddFile adds a file to the repository. It will create a new template based on the filename. It trims the .gotmpl from the end and converts the name using swag.ToJSONName. This will strip directory separators and Camelcase the next letter. e.g validation/primitive.gotmpl will become validationPrimitive

If the file contains a definition for a template that is protected the whole file will not be added

func (*Repository) DumpTemplates

func (t *Repository) DumpTemplates()

DumpTemplates prints out a dump of all the defined templates, where they are defined and what their dependencies are.

func (*Repository) Get

func (t *Repository) Get(name string) (*template.Template, error)

Get will return the named template from the repository, ensuring that all dependent templates are loaded. It will return an error if a dependent template is not defined in the repository.

func (*Repository) LoadContrib

func (t *Repository) LoadContrib(name string) error

LoadContrib loads template from contrib directory

func (*Repository) LoadDefaults

func (t *Repository) LoadDefaults()

LoadDefaults will load the embedded templates

func (*Repository) LoadDir

func (t *Repository) LoadDir(templatePath string) error

LoadDir will walk the specified path and add each .gotmpl file it finds to the repository

func (*Repository) LoadPlugin

func (t *Repository) LoadPlugin(pluginPath string) error

LoadPlugin will load the named plugin and inject its functions into the funcMap

The plugin must implement a function matching the signature: `func AddFuncs(f template.FuncMap)` which can add any number of functions to the template repository funcMap. Any existing sprig or go-swagger templates with the same name will be overridden.

func (*Repository) MustGet

func (t *Repository) MustGet(name string) *template.Template

MustGet a template by name, panics when fails

func (*Repository) SetAllowOverride

func (t *Repository) SetAllowOverride(value bool)

SetAllowOverride allows setting allowOverride after the Repository was initialized

func (*Repository) ShallowClone

func (t *Repository) ShallowClone() *Repository

ShallowClone a repository.

Clones the maps of files and templates, so as to be able to use the cloned repo concurrently.

type SectionOpts

type SectionOpts struct {
	Application     []TemplateOpts `mapstructure:"application"`
	Operations      []TemplateOpts `mapstructure:"operations"`
	OperationGroups []TemplateOpts `mapstructure:"operation_groups"`
	Models          []TemplateOpts `mapstructure:"models"`
	PostModels      []TemplateOpts `mapstructure:"post_models"`
}

SectionOpts allows for specifying options to customize the templates used for generation

type TemplateOpts

type TemplateOpts struct {
	Name       string `mapstructure:"name"`
	Source     string `mapstructure:"source"`
	Target     string `mapstructure:"target"`
	FileName   string `mapstructure:"file_name"`
	SkipExists bool   `mapstructure:"skip_exists"`
	SkipFormat bool   `mapstructure:"skip_format"`
}

TemplateOpts allows for codegen customization

Directories

Path Synopsis
internal
gentest
Package gentest provides internal test utilities
Package gentest provides internal test utilities

Jump to

Keyboard shortcuts

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