186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			186 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Go
		
	
	
	
// Package swagger implements the structures of the Swagger
 | 
						|
// https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md
 | 
						|
package swagger
 | 
						|
 | 
						|
const swaggerVersion = "1.2"
 | 
						|
 | 
						|
// 4.3.3 Data Type Fields
 | 
						|
type DataTypeFields struct {
 | 
						|
	Type         *string  `json:"type,omitempty"` // if Ref not used
 | 
						|
	Ref          *string  `json:"$ref,omitempty"` // if Type not used
 | 
						|
	Format       string   `json:"format,omitempty"`
 | 
						|
	DefaultValue Special  `json:"defaultValue,omitempty"`
 | 
						|
	Enum         []string `json:"enum,omitempty"`
 | 
						|
	Minimum      string   `json:"minimum,omitempty"`
 | 
						|
	Maximum      string   `json:"maximum,omitempty"`
 | 
						|
	Items        *Item    `json:"items,omitempty"`
 | 
						|
	UniqueItems  *bool    `json:"uniqueItems,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
type Special string
 | 
						|
 | 
						|
// 4.3.4 Items Object
 | 
						|
type Item struct {
 | 
						|
	Type   *string `json:"type,omitempty"`
 | 
						|
	Ref    *string `json:"$ref,omitempty"`
 | 
						|
	Format string  `json:"format,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1 Resource Listing
 | 
						|
type ResourceListing struct {
 | 
						|
	SwaggerVersion string          `json:"swaggerVersion"` // e.g 1.2
 | 
						|
	Apis           []Resource      `json:"apis"`
 | 
						|
	ApiVersion     string          `json:"apiVersion"`
 | 
						|
	Info           Info            `json:"info"`
 | 
						|
	Authorizations []Authorization `json:"authorizations,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.2 Resource Object
 | 
						|
type Resource struct {
 | 
						|
	Path        string `json:"path"` // relative or absolute, must start with /
 | 
						|
	Description string `json:"description"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.3 Info Object
 | 
						|
type Info struct {
 | 
						|
	Title             string `json:"title"`
 | 
						|
	Description       string `json:"description"`
 | 
						|
	TermsOfServiceUrl string `json:"termsOfServiceUrl,omitempty"`
 | 
						|
	Contact           string `json:"contact,omitempty"`
 | 
						|
	License           string `json:"license,omitempty"`
 | 
						|
	LicenseUrl        string `json:"licenseUrl,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.5
 | 
						|
type Authorization struct {
 | 
						|
	Type       string      `json:"type"`
 | 
						|
	PassAs     string      `json:"passAs"`
 | 
						|
	Keyname    string      `json:"keyname"`
 | 
						|
	Scopes     []Scope     `json:"scopes"`
 | 
						|
	GrantTypes []GrantType `json:"grandTypes"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.6, 5.2.11
 | 
						|
type Scope struct {
 | 
						|
	// Required. The name of the scope.
 | 
						|
	Scope string `json:"scope"`
 | 
						|
	// Recommended. A short description of the scope.
 | 
						|
	Description string `json:"description"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.7
 | 
						|
type GrantType struct {
 | 
						|
	Implicit          Implicit          `json:"implicit"`
 | 
						|
	AuthorizationCode AuthorizationCode `json:"authorization_code"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.8 Implicit Object
 | 
						|
type Implicit struct {
 | 
						|
	// Required. The login endpoint definition.
 | 
						|
	loginEndpoint LoginEndpoint `json:"loginEndpoint"`
 | 
						|
	// An optional alternative name to standard "access_token" OAuth2 parameter.
 | 
						|
	TokenName string `json:"tokenName"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.9 Authorization Code Object
 | 
						|
type AuthorizationCode struct {
 | 
						|
	TokenRequestEndpoint TokenRequestEndpoint `json:"tokenRequestEndpoint"`
 | 
						|
	TokenEndpoint        TokenEndpoint        `json:"tokenEndpoint"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.10 Login Endpoint Object
 | 
						|
type LoginEndpoint struct {
 | 
						|
	// Required. The URL of the authorization endpoint for the implicit grant flow. The value SHOULD be in a URL format.
 | 
						|
	Url string `json:"url"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.11 Token Request Endpoint Object
 | 
						|
type TokenRequestEndpoint struct {
 | 
						|
	// Required. The URL of the authorization endpoint for the authentication code grant flow. The value SHOULD be in a URL format.
 | 
						|
	Url string `json:"url"`
 | 
						|
	// An optional alternative name to standard "client_id" OAuth2 parameter.
 | 
						|
	ClientIdName string `json:"clientIdName"`
 | 
						|
	// An optional alternative name to the standard "client_secret" OAuth2 parameter.
 | 
						|
	ClientSecretName string `json:"clientSecretName"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.1.12 Token Endpoint Object
 | 
						|
type TokenEndpoint struct {
 | 
						|
	// Required. The URL of the token endpoint for the authentication code grant flow. The value SHOULD be in a URL format.
 | 
						|
	Url string `json:"url"`
 | 
						|
	// An optional alternative name to standard "access_token" OAuth2 parameter.
 | 
						|
	TokenName string `json:"tokenName"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2 API Declaration
 | 
						|
type ApiDeclaration struct {
 | 
						|
	SwaggerVersion string          `json:"swaggerVersion"`
 | 
						|
	ApiVersion     string          `json:"apiVersion"`
 | 
						|
	BasePath       string          `json:"basePath"`
 | 
						|
	ResourcePath   string          `json:"resourcePath"` // must start with /
 | 
						|
	Info           Info            `json:"info"`
 | 
						|
	Apis           []Api           `json:"apis,omitempty"`
 | 
						|
	Models         ModelList       `json:"models,omitempty"`
 | 
						|
	Produces       []string        `json:"produces,omitempty"`
 | 
						|
	Consumes       []string        `json:"consumes,omitempty"`
 | 
						|
	Authorizations []Authorization `json:"authorizations,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.2 API Object
 | 
						|
type Api struct {
 | 
						|
	Path        string      `json:"path"` // relative or absolute, must start with /
 | 
						|
	Description string      `json:"description"`
 | 
						|
	Operations  []Operation `json:"operations,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.3 Operation Object
 | 
						|
type Operation struct {
 | 
						|
	DataTypeFields
 | 
						|
	Method           string            `json:"method"`
 | 
						|
	Summary          string            `json:"summary,omitempty"`
 | 
						|
	Notes            string            `json:"notes,omitempty"`
 | 
						|
	Nickname         string            `json:"nickname"`
 | 
						|
	Authorizations   []Authorization   `json:"authorizations,omitempty"`
 | 
						|
	Parameters       []Parameter       `json:"parameters"`
 | 
						|
	ResponseMessages []ResponseMessage `json:"responseMessages,omitempty"` // optional
 | 
						|
	Produces         []string          `json:"produces,omitempty"`
 | 
						|
	Consumes         []string          `json:"consumes,omitempty"`
 | 
						|
	Deprecated       string            `json:"deprecated,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.4 Parameter Object
 | 
						|
type Parameter struct {
 | 
						|
	DataTypeFields
 | 
						|
	ParamType     string `json:"paramType"` // path,query,body,header,form
 | 
						|
	Name          string `json:"name"`
 | 
						|
	Description   string `json:"description"`
 | 
						|
	Required      bool   `json:"required"`
 | 
						|
	AllowMultiple bool   `json:"allowMultiple"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.5 Response Message Object
 | 
						|
type ResponseMessage struct {
 | 
						|
	Code          int    `json:"code"`
 | 
						|
	Message       string `json:"message"`
 | 
						|
	ResponseModel string `json:"responseModel,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.6, 5.2.7 Models Object
 | 
						|
type Model struct {
 | 
						|
	Id            string            `json:"id"`
 | 
						|
	Description   string            `json:"description,omitempty"`
 | 
						|
	Required      []string          `json:"required,omitempty"`
 | 
						|
	Properties    ModelPropertyList `json:"properties"`
 | 
						|
	SubTypes      []string          `json:"subTypes,omitempty"`
 | 
						|
	Discriminator string            `json:"discriminator,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.8 Properties Object
 | 
						|
type ModelProperty struct {
 | 
						|
	DataTypeFields
 | 
						|
	Description string `json:"description,omitempty"`
 | 
						|
}
 | 
						|
 | 
						|
// 5.2.10
 | 
						|
type Authorizations map[string]Authorization
 |