mirror of
https://github.com/rancher/norman.git
synced 2025-06-21 21:17:13 +00:00
Added enable function to schemas. This allows filtering of schemas which is a required part of feature flagging in rancher. Added addFeature functions to controller template for adding handlers that can be disabled if their associated feature is disabled.
171 lines
5.8 KiB
Go
171 lines
5.8 KiB
Go
package types
|
|
|
|
const (
|
|
ResourceFieldID = "id"
|
|
)
|
|
|
|
type Collection struct {
|
|
Type string `json:"type,omitempty"`
|
|
Links map[string]string `json:"links"`
|
|
CreateTypes map[string]string `json:"createTypes,omitempty"`
|
|
Actions map[string]string `json:"actions"`
|
|
Pagination *Pagination `json:"pagination,omitempty"`
|
|
Sort *Sort `json:"sort,omitempty"`
|
|
Filters map[string][]Condition `json:"filters,omitempty"`
|
|
ResourceType string `json:"resourceType"`
|
|
}
|
|
|
|
type GenericCollection struct {
|
|
Collection
|
|
Data []interface{} `json:"data"`
|
|
}
|
|
|
|
type ResourceCollection struct {
|
|
Collection
|
|
Data []Resource `json:"data,omitempty"`
|
|
}
|
|
|
|
type SortOrder string
|
|
|
|
type Sort struct {
|
|
Name string `json:"name,omitempty"`
|
|
Order SortOrder `json:"order,omitempty"`
|
|
Reverse string `json:"reverse,omitempty"`
|
|
Links map[string]string `json:"links,omitempty"`
|
|
}
|
|
|
|
var (
|
|
ModifierEQ ModifierType = "eq"
|
|
ModifierNE ModifierType = "ne"
|
|
ModifierNull ModifierType = "null"
|
|
ModifierNotNull ModifierType = "notnull"
|
|
ModifierIn ModifierType = "in"
|
|
ModifierNotIn ModifierType = "notin"
|
|
)
|
|
|
|
type ModifierType string
|
|
|
|
type Condition struct {
|
|
Modifier ModifierType `json:"modifier,omitempty"`
|
|
Value interface{} `json:"value,omitempty"`
|
|
}
|
|
|
|
type Pagination struct {
|
|
Marker string `json:"marker,omitempty"`
|
|
First string `json:"first,omitempty"`
|
|
Previous string `json:"previous,omitempty"`
|
|
Next string `json:"next,omitempty"`
|
|
Last string `json:"last,omitempty"`
|
|
Limit *int64 `json:"limit,omitempty"`
|
|
Total *int64 `json:"total,omitempty"`
|
|
Partial bool `json:"partial,omitempty"`
|
|
}
|
|
|
|
type Resource struct {
|
|
ID string `json:"id,omitempty"`
|
|
Type string `json:"type,omitempty"`
|
|
Links map[string]string `json:"links"`
|
|
Actions map[string]string `json:"actions"`
|
|
}
|
|
|
|
type NamedResource struct {
|
|
Resource
|
|
Name string `json:"name"`
|
|
Description string `json:"description"`
|
|
}
|
|
|
|
type NamedResourceCollection struct {
|
|
Collection
|
|
Data []NamedResource `json:"data,omitempty"`
|
|
}
|
|
|
|
type APIVersion struct {
|
|
Group string `json:"group,omitempty"`
|
|
Version string `json:"version,omitempty"`
|
|
Path string `json:"path,omitempty"`
|
|
SubContext bool `json:"subContext,omitempty"`
|
|
SubContextSchema string `json:"filterField,omitempty"`
|
|
}
|
|
|
|
type Namespaced struct{}
|
|
|
|
var NamespaceScope TypeScope = "namespace"
|
|
|
|
type TypeScope string
|
|
|
|
type Schema struct {
|
|
ID string `json:"id,omitempty"`
|
|
Embed bool `json:"embed,omitempty"`
|
|
EmbedType string `json:"embedType,omitempty"`
|
|
CodeName string `json:"-"`
|
|
CodeNamePlural string `json:"-"`
|
|
PkgName string `json:"-"`
|
|
Type string `json:"type,omitempty"`
|
|
BaseType string `json:"baseType,omitempty"`
|
|
Links map[string]string `json:"links"`
|
|
Version APIVersion `json:"version"`
|
|
PluralName string `json:"pluralName,omitempty"`
|
|
ResourceMethods []string `json:"resourceMethods,omitempty"`
|
|
ResourceFields map[string]Field `json:"resourceFields"`
|
|
ResourceActions map[string]Action `json:"resourceActions,omitempty"`
|
|
CollectionMethods []string `json:"collectionMethods,omitempty"`
|
|
CollectionFields map[string]Field `json:"collectionFields,omitempty"`
|
|
CollectionActions map[string]Action `json:"collectionActions,omitempty"`
|
|
CollectionFilters map[string]Filter `json:"collectionFilters,omitempty"`
|
|
DynamicSchemaVersion string `json:"dynamicSchemaVersion,omitempty"`
|
|
Scope TypeScope `json:"-"`
|
|
Enabled func() bool `json:"-"`
|
|
|
|
InternalSchema *Schema `json:"-"`
|
|
Mapper Mapper `json:"-"`
|
|
ActionHandler ActionHandler `json:"-"`
|
|
LinkHandler RequestHandler `json:"-"`
|
|
ListHandler RequestHandler `json:"-"`
|
|
CreateHandler RequestHandler `json:"-"`
|
|
DeleteHandler RequestHandler `json:"-"`
|
|
UpdateHandler RequestHandler `json:"-"`
|
|
InputFormatter InputFormatter `json:"-"`
|
|
Formatter Formatter `json:"-"`
|
|
CollectionFormatter CollectionFormatter `json:"-"`
|
|
ErrorHandler ErrorHandler `json:"-"`
|
|
Validator Validator `json:"-"`
|
|
Store Store `json:"-"`
|
|
}
|
|
|
|
type Field struct {
|
|
Type string `json:"type,omitempty"`
|
|
Default interface{} `json:"default,omitempty"`
|
|
Nullable bool `json:"nullable,omitempty"`
|
|
Create bool `json:"create"`
|
|
WriteOnly bool `json:"writeOnly,omitempty"`
|
|
Required bool `json:"required,omitempty"`
|
|
Update bool `json:"update"`
|
|
MinLength *int64 `json:"minLength,omitempty"`
|
|
MaxLength *int64 `json:"maxLength,omitempty"`
|
|
Min *int64 `json:"min,omitempty"`
|
|
Max *int64 `json:"max,omitempty"`
|
|
Options []string `json:"options,omitempty"`
|
|
ValidChars string `json:"validChars,omitempty"`
|
|
InvalidChars string `json:"invalidChars,omitempty"`
|
|
Description string `json:"description,omitempty"`
|
|
CodeName string `json:"-"`
|
|
DynamicField bool `json:"dynamicField,omitempty"`
|
|
}
|
|
|
|
type Action struct {
|
|
Input string `json:"input,omitempty"`
|
|
Output string `json:"output,omitempty"`
|
|
}
|
|
|
|
type Filter struct {
|
|
Modifiers []ModifierType `json:"modifiers,omitempty"`
|
|
}
|
|
|
|
type ListOpts struct {
|
|
Filters map[string]interface{}
|
|
}
|
|
|
|
func (c *Collection) AddAction(apiContext *APIContext, name string) {
|
|
c.Actions[name] = apiContext.URLBuilder.CollectionAction(apiContext.Schema, nil, name)
|
|
}
|