Documentation
¶
Overview ¶
Package model contains the core logic of the code generation process.
Index ¶
- func GenerateCode(goOutputDir, modelData string)
- type API
- type APIDefinition
- type APIEntry
- type APIModel
- type APIReferenceFile
- type AllOf
- type AnyOf
- type Entry
- type Exchange
- type ExchangeEntry
- type ForEachIn
- type IfThen
- type JsonSubSchema
- type RequiredScope
- type RouteElement
- type ScopeExpressionTemplate
- type SortedAPIDefs
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GenerateCode ¶
func GenerateCode(goOutputDir, modelData string)
GenerateCode takes the objects loaded into memory in LoadAPIs and writes them out as go code.
Types ¶
type API ¶
type API struct {
*APIReferenceFile
// contains filtered or unexported fields
}
API represents the HTTP interface of a Taskcluster service
type APIDefinition ¶
type APIDefinition struct {
URL string `json:"url"`
Name string `json:"name"`
DocRoot string `json:"docroot"`
Data APIModel
PackageName string
ExampleVarName string
PackagePath string
SchemaURL string
// contains filtered or unexported fields
}
APIDefinition represents the definition of a REST API, comprising of the URL to the defintion of the API in json format, together with a URL to a json schema to validate the definition
func LoadAPIs ¶
func LoadAPIs(apiManifestUrl, supplementaryDataFile string) []APIDefinition
LoadAPIs takes care of reading all json files and performing elementary processing of the data, such as assigning unique type names to entities which will be translated to go types.
Data is unmarshaled into objects (or instances of go types) and then postPopulate is called on the objects. This in turn triggers further reading of json files and unmarshalling where schemas refer to other schemas.
When LoadAPIs returns, all json schemas and sub schemas should have been read and unmarhsalled into go objects.
type APIModel ¶
type APIModel interface {
String() string
// contains filtered or unexported methods
}
type APIReferenceFile ¶ added in v1.0.230
type APIReferenceFile struct {
// Link to schema for this reference. That is a link to this very document. Typically used to identify what kind of reference this file is.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/$schema
Schema string `json:"$schema"`
// BaseUrl for all _routes_ described in this document
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/baseUrl
BaseURL string `json:"baseUrl"`
// API description in markdown
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/description
Description string `json:"description"`
// Array of methods in this reference
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries
Entries []APIEntry `json:"entries"`
// API title in markdown
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/title
Title string `json:"title"`
// API reference version
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/version
Version json.RawMessage `json:"version"`
}
Reference of methods implemented by API
See http://schemas.taskcluster.net/base/v1/api-reference.json#
type AllOf ¶ added in v1.0.230
type AllOf struct {
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[2]/properties/AllOf
AllOf []ScopeExpressionTemplate `json:"AllOf"`
}
AllOf objects will evaluate to true if all subexpressions are true
type AnyOf ¶ added in v1.0.230
type AnyOf struct {
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[1]/properties/AnyOf
AnyOf []ScopeExpressionTemplate `json:"AnyOf"`
}
AnyOf objects will evaluate to true if any subexpressions are true
type Entry ¶ added in v1.0.230
type Entry struct {
// Arguments from `route` that must be replaced, they'll appear wrapped in brackets inside `route`.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/args
Args []string `json:"args"`
// Description (ie. documentation) for the API entry
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/description
Description string `json:"description"`
// JSON schema for input, if input is taken otherwise not present.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/input
Input string `json:"input,omitempty"`
// HTTP method (verb) used to access the function
//
// Possible values:
// * "get"
// * "post"
// * "put"
// * "head"
// * "delete"
// * "options"
// * "trace"
// * "copy"
// * "lock"
// * "mkcol"
// * "move"
// * "purge"
// * "propfind"
// * "proppatch"
// * "unlock"
// * "report"
// * "mkactivity"
// * "checkout"
// * "merge"
// * "m-search"
// * "notify"
// * "subscribe"
// * "unsubscribe"
// * "patch"
// * "search"
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/method
Method string `json:"method"`
// Name of the `function` this is a stable identifier for use in auto-generated client libraries
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/name
Name string `json:"name"`
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/output
Output string `json:"output,omitempty"`
// List of accepted query-string parameters, these are always optional.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/query
Query []string `json:"query,omitempty"`
// Route for the call, note that arguments wrapped with brackets, like `/v1/user/<userId>/` must be replaced. And the route must be appended to the `baseUrl`
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/route
Route string `json:"route"`
// Scope expression template specifying required scopes for a method. Not provided if authentication isn't required.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/scopes
Scopes ScopeExpressionTemplate `json:"scopes,omitempty"`
// Stability level of the API
//
// Possible values:
// * "deprecated"
// * "experimental"
// * "stable"
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/stability
Stability string `json:"stability"`
// Title of API entry
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/title
Title string `json:"title"`
// Type of entry, currently only `function`.
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/properties/entries/items/properties/type
Type string `json:"type"`
}
type Exchange ¶
type Exchange struct {
Version interface{} `json:"version"`
Title string `json:"title"`
Description string `json:"description"`
ExchangePrefix string `json:"exchangePrefix"`
Entries []ExchangeEntry `json:"entries"`
// contains filtered or unexported fields
}
type ExchangeEntry ¶
type ExchangeEntry struct {
Type string `json:"type"`
Exchange string `json:"exchange"`
Name string `json:"name"`
Title string `json:"title"`
Description string `json:"description"`
RoutingKey []RouteElement `json:"routingKey"`
Schema string `json:"schema"`
Parent *Exchange
Payload *JsonSubSchema
}
func (*ExchangeEntry) String ¶
func (entry *ExchangeEntry) String() string
type ForEachIn ¶ added in v1.0.230
type ForEachIn struct {
// Syntax: ^[\x20-\x7e]*$
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[4]/properties/each
Each string `json:"each"`
// Syntax: ^[\x20-\x7e]*$
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[4]/properties/for
For string `json:"for"`
// Syntax: ^[\x20-\x7e]*$
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[4]/properties/in
In string `json:"in"`
}
for/each/in objects will replace themselves with an array of basic scopes. They will be flattened into the array this object is a part of.
type IfThen ¶ added in v1.0.230
type IfThen struct {
// Syntax: ^[\x20-\x7e]*$
//
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[3]/properties/if
If string `json:"if"`
// See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate/oneOf[3]/properties/then
Then ScopeExpressionTemplate `json:"then"`
}
if/then objects will replace themselves with the contents of then if the `if` is true
type JsonSubSchema ¶
type JsonSubSchema jsonschema2go.JsonSubSchema
func (*JsonSubSchema) TypeDefinition ¶
func (jsonSubSchema *JsonSubSchema) TypeDefinition(level int, extraPackages map[string]bool) (classDefinition, comment, typ string)
type RequiredScope ¶ added in v1.0.230
type RequiredScope string
The most basic element of a scope expression
Syntax: ^[\x20-\x7e]*$
func (*RequiredScope) String ¶ added in v1.0.230
func (rs *RequiredScope) String() string
type RouteElement ¶
type RouteElement struct {
Name string `json:"name"`
Summary string `json:"summary"`
Constant string `json:"constant"`
MultipleWords bool `json:"multipleWords"`
Required bool `json:"required"`
}
func (*RouteElement) String ¶
func (re *RouteElement) String() string
type ScopeExpressionTemplate ¶ added in v1.0.230
type ScopeExpressionTemplate struct {
RawMessage json.RawMessage
// One of:
// * "AllOf"
// * "AnyOf"
// * "ForEachIn"
// * "IfThen"
// * "RequiredScope"
Type string
AllOf *AllOf
AnyOf *AnyOf
ForEachIn *ForEachIn
IfThen *IfThen
RequiredScope *RequiredScope
}
See http://schemas.taskcluster.net/base/v1/api-reference.json#/definitions/scopeExpressionTemplate
func (*ScopeExpressionTemplate) MarshalJSON ¶ added in v1.0.230
func (this *ScopeExpressionTemplate) MarshalJSON() ([]byte, error)
MarshalJSON calls json.RawMessage method of the same name. Required since ScopeExpressionTemplate is of type json.RawMessage...
func (*ScopeExpressionTemplate) String ¶ added in v1.0.230
func (scopes *ScopeExpressionTemplate) String() string
func (*ScopeExpressionTemplate) UnmarshalJSON ¶ added in v1.0.230
func (this *ScopeExpressionTemplate) UnmarshalJSON(data []byte) error
UnmarshalJSON identifies the data structure at runtime, and unmarshals in the appropriate type
type SortedAPIDefs ¶
type SortedAPIDefs []APIDefinition
func (SortedAPIDefs) Len ¶
func (a SortedAPIDefs) Len() int
needed so that SortedAPIDefs can implement sort.Interface
func (SortedAPIDefs) Less ¶
func (a SortedAPIDefs) Less(i, j int) bool
func (SortedAPIDefs) Swap ¶
func (a SortedAPIDefs) Swap(i, j int)