Documentation ¶
Index ¶
- Variables
- func NewDoc() (*openapi3.T, error)
- func NewDocFromSkeleton(spec []byte) (*openapi3.T, error)
- type Binder
- type Config
- func (c *Config) BuildDoc(ctx context.Context, use func(m *Manager)) (*openapi3.T, error)
- func (c *Config) DefaultExtractor() Extractor
- func (c *Config) DefaultResolver() Resolver
- func (c *Config) DefaultSelector() Selector
- func (c *Config) EmitDoc(use func(m *Manager))
- func (c *Config) NewManager() (*Manager, func(ctx context.Context) error, error)
- type DefaultSelector
- type Direction
- type Extractor
- type FirstParamInputSelector
- type FirstParamOutputSelector
- type Header
- type Manager
- func (m *Manager) RegisterFunc(fn interface{}, modifiers ...func(*openapi3.Operation)) *RegisterFuncAction
- func (m *Manager) RegisterFuncText(fn interface{}, contentType string, modifiers ...func(*openapi3.Operation)) *RegisterFuncAction
- func (m *Manager) RegisterInterception(rt reflect.Type, intercept func(*shape.Shape) *openapi3.Schema)
- func (m *Manager) RegisterType(ob interface{}, modifiers ...func(*openapi3.SchemaRef)) *RegisterTypeAction
- type MergeParamsInputSelector
- type NameStore
- type NoRefResolver
- func (r *NoRefResolver) ResolveParameter(v *openapi3.Parameter, s *shape.Shape) *openapi3.ParameterRef
- func (r *NoRefResolver) ResolveRequestBody(v *openapi3.RequestBody, s *shape.Shape) *openapi3.RequestBodyRef
- func (r *NoRefResolver) ResolveResponse(v *openapi3.Response, s *shape.Shape) *openapi3.ResponseRef
- func (r *NoRefResolver) ResolveSchema(v *openapi3.Schema, s *shape.Shape, typ Direction) *openapi3.SchemaRef
- type RefPair
- type RegisterFuncAction
- func (a *RegisterFuncAction) After(f func(*openapi3.Operation)) *RegisterFuncAction
- func (a *RegisterFuncAction) AnotherError(code int, value interface{}, description string) *RegisterFuncAction
- func (a *RegisterFuncAction) Before(f func(*shape.Func)) *RegisterFuncAction
- func (a *RegisterFuncAction) DefaultInput(value interface{}) *RegisterFuncAction
- func (a *RegisterFuncAction) Description(description string) *RegisterFuncAction
- func (a *RegisterFuncAction) Error(value interface{}, description string) *RegisterFuncAction
- func (a *RegisterFuncAction) Example(code int, mime string, title, description string, value interface{}) *RegisterFuncAction
- func (a *RegisterFuncAction) Headers(values ...Header) *RegisterFuncAction
- func (a *RegisterFuncAction) Status(code int) *RegisterFuncAction
- func (a *RegisterFuncAction) Tags(tags ...string) *RegisterFuncAction
- type RegisterTypeAction
- func (a *RegisterTypeAction) After(f func(*openapi3.Schema)) *RegisterTypeAction
- func (a *RegisterTypeAction) Before(f func(*shape.Shape)) *RegisterTypeAction
- func (a *RegisterTypeAction) Default(value interface{}) *RegisterTypeAction
- func (a *RegisterTypeAction) Description(description string) *RegisterTypeAction
- func (a *RegisterTypeAction) Enum(values ...interface{}) *RegisterTypeAction
- func (a *RegisterTypeAction) Example(value interface{}) *RegisterTypeAction
- type Resolver
- type Selector
- type TagNameOption
- type Transformer
- type UseRefResolver
- func (r *UseRefResolver) ResolveParameter(v *openapi3.Parameter, s *shape.Shape) *openapi3.ParameterRef
- func (r *UseRefResolver) ResolveRequestBody(v *openapi3.RequestBody, s *shape.Shape) *openapi3.RequestBodyRef
- func (r *UseRefResolver) ResolveResponse(v *openapi3.Response, s *shape.Shape) *openapi3.ResponseRef
- func (r *UseRefResolver) ResolveSchema(v *openapi3.Schema, s *shape.Shape, direction Direction) (ref *openapi3.SchemaRef)
- type Visitor
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var FORCE bool
Functions ¶
Types ¶
type Config ¶ added in v0.0.2
type Config struct { *TagNameOption Fset *token.FileSet Info *info.Info // go/types.Info like object (tracking metadata) Doc *openapi3.T Loaded bool // if true, skip registerType() and registerFunc() actions Resolver Resolver Selector Selector Extractor Extractor StrictSchema bool // if true, use `{additionalProperties: false}` as default SkipValidation bool // if true, skip validation for api doc definition SkipExtractComments bool // if true, skip extracting comments as a description EnableAutoTag bool // if true, adding package name as tag DisableInputRef bool DisableOutputRef bool DefaultError interface{} DefaultErrorExample interface{} IsRequiredCheckFunction func(reflect.StructTag) bool // handling required, default is always false GoPositionFunc func(*token.FileSet, *shape.Func) string }
Example ¶
package main import ( "context" "encoding/json" "os" "github.com/getkin/kin-openapi/openapi3" reflectopenapi "github.com/podhmo/reflect-openapi" ) // This is Owner of something type Owner struct { // name of owner Name string `json:"name" openapi-override:"{'pattern': '^[A-Z][-A-Za-z]+$'}"` Age int `json:"age,omitempty"` // age of owner } // input parameters type ListOwnerInput struct { // sort option Sort string `json:"sort" in:"query" openapi-override:"{'enum': ['desc', 'asc'], 'default': 'asc'}"` } // Returns list of owners. func ListOwner(ctx context.Context, input ListOwnerInput) ([]*Owner, error) { return nil, nil } func main() { c := reflectopenapi.Config{ TagNameOption: &reflectopenapi.TagNameOption{ NameTag: "json", ParamTypeTag: "in", DescriptionTag: "description", OverrideTag: "openapi-override", }, SkipValidation: true, EnableAutoTag: true, Extractor: shapeCfg, } doc, _ := c.BuildDoc(context.Background(), func(m *reflectopenapi.Manager) { m.RegisterFunc(ListOwner).After(func(op *openapi3.Operation) { m.Doc.AddOperation("/owners", "GET", op) }) }) enc := json.NewEncoder(os.Stdout) enc.SetIndent("", "@@") enc.Encode(doc) }
Output: { @@"components": { @@@@"schemas": { @@@@@@"Owner": { @@@@@@@@"description": "This is Owner of something", @@@@@@@@"properties": { @@@@@@@@@@"age": { @@@@@@@@@@@@"description": "age of owner", @@@@@@@@@@@@"type": "integer" @@@@@@@@@@}, @@@@@@@@@@"name": { @@@@@@@@@@@@"description": "name of owner", @@@@@@@@@@@@"pattern": "^[A-Z][-A-Za-z]+$", @@@@@@@@@@@@"type": "string" @@@@@@@@@@} @@@@@@@@}, @@@@@@@@"required": [ @@@@@@@@@@"name" @@@@@@@@], @@@@@@@@"title": "Owner", @@@@@@@@"type": "object" @@@@@@} @@@@} @@}, @@"info": { @@@@"title": "Sample API", @@@@"version": "0.0.0" @@}, @@"openapi": "3.0.0", @@"paths": { @@@@"/owners": { @@@@@@"get": { @@@@@@@@"description": "Returns list of owners.", @@@@@@@@"operationId": "github.com/podhmo/reflect-openapi_test.ListOwner", @@@@@@@@"parameters": [ @@@@@@@@@@{ @@@@@@@@@@@@"description": "sort option", @@@@@@@@@@@@"in": "query", @@@@@@@@@@@@"name": "sort", @@@@@@@@@@@@"schema": { @@@@@@@@@@@@@@"default": "asc", @@@@@@@@@@@@@@"enum": [ @@@@@@@@@@@@@@@@"desc", @@@@@@@@@@@@@@@@"asc" @@@@@@@@@@@@@@], @@@@@@@@@@@@@@"type": "string" @@@@@@@@@@@@} @@@@@@@@@@} @@@@@@@@], @@@@@@@@"responses": { @@@@@@@@@@"200": { @@@@@@@@@@@@"content": { @@@@@@@@@@@@@@"application/json": { @@@@@@@@@@@@@@@@"schema": { @@@@@@@@@@@@@@@@@@"items": { @@@@@@@@@@@@@@@@@@@@"$ref": "#/components/schemas/Owner" @@@@@@@@@@@@@@@@@@}, @@@@@@@@@@@@@@@@@@"type": "array" @@@@@@@@@@@@@@@@} @@@@@@@@@@@@@@} @@@@@@@@@@@@}, @@@@@@@@@@@@"description": "" @@@@@@@@@@}, @@@@@@@@@@"default": { @@@@@@@@@@@@"description": "" @@@@@@@@@@} @@@@@@@@}, @@@@@@@@"summary": "Returns list of owners.", @@@@@@@@"tags": [ @@@@@@@@@@"reflect-openapi_test" @@@@@@@@] @@@@@@} @@@@} @@}, @@"servers": [ @@@@{ @@@@@@"description": "local development server", @@@@@@"url": "http://localhost:8888" @@@@} @@], @@"tags": [ @@@@{ @@@@@@"name": "reflect-openapi_test" @@@@} @@] }
func (*Config) DefaultExtractor ¶ added in v0.0.6
func (*Config) DefaultResolver ¶ added in v0.0.6
func (*Config) DefaultSelector ¶ added in v0.0.6
type DefaultSelector ¶ added in v0.0.6
type DefaultSelector struct { FirstParamInputSelector FirstParamOutputSelector }
type FirstParamInputSelector ¶ added in v0.0.6
type FirstParamInputSelector struct{}
func (*FirstParamInputSelector) SelectInput ¶ added in v0.0.6
type FirstParamOutputSelector ¶ added in v0.0.6
type FirstParamOutputSelector struct{}
func (*FirstParamOutputSelector) SelectOutput ¶ added in v0.0.6
type Manager ¶ added in v0.0.2
type Manager struct { Visitor *Visitor // TODO: changes to unexported field Resolver Resolver Actions []*registerAction Doc *openapi3.T }
func (*Manager) RegisterFunc ¶ added in v0.0.9
func (m *Manager) RegisterFunc(fn interface{}, modifiers ...func(*openapi3.Operation)) *RegisterFuncAction
func (*Manager) RegisterFuncText ¶ added in v0.3.0
func (m *Manager) RegisterFuncText(fn interface{}, contentType string, modifiers ...func(*openapi3.Operation)) *RegisterFuncAction
func (*Manager) RegisterInterception ¶ added in v0.2.0
func (*Manager) RegisterType ¶ added in v0.0.9
func (m *Manager) RegisterType(ob interface{}, modifiers ...func(*openapi3.SchemaRef)) *RegisterTypeAction
type MergeParamsInputSelector ¶ added in v0.0.6
type MergeParamsInputSelector struct {
// contains filtered or unexported fields
}
func (*MergeParamsInputSelector) NeedTransformer ¶ added in v0.2.0
func (s *MergeParamsInputSelector) NeedTransformer(t *Transformer)
func (*MergeParamsInputSelector) SelectInput ¶ added in v0.0.6
type NameStore ¶ added in v0.0.9
type NameStore struct { Prefix string OnConflict func(*RefPair, int) // contains filtered or unexported fields }
func NewNameStore ¶ added in v0.0.9
func NewNameStore() *NameStore
func (*NameStore) BindSchemas ¶ added in v0.0.9
type NoRefResolver ¶
type NoRefResolver struct {
AdditionalPropertiesAllowed *bool // set as Config.StrictSchema
}
func (*NoRefResolver) ResolveParameter ¶
func (r *NoRefResolver) ResolveParameter(v *openapi3.Parameter, s *shape.Shape) *openapi3.ParameterRef
func (*NoRefResolver) ResolveRequestBody ¶
func (r *NoRefResolver) ResolveRequestBody(v *openapi3.RequestBody, s *shape.Shape) *openapi3.RequestBodyRef
func (*NoRefResolver) ResolveResponse ¶
func (r *NoRefResolver) ResolveResponse(v *openapi3.Response, s *shape.Shape) *openapi3.ResponseRef
func (*NoRefResolver) ResolveSchema ¶
type RegisterFuncAction ¶ added in v0.0.9
type RegisterFuncAction struct {
// contains filtered or unexported fields
}
func (*RegisterFuncAction) After ¶ added in v0.0.9
func (a *RegisterFuncAction) After(f func(*openapi3.Operation)) *RegisterFuncAction
func (*RegisterFuncAction) AnotherError ¶ added in v0.3.0
func (a *RegisterFuncAction) AnotherError(code int, value interface{}, description string) *RegisterFuncAction
func (*RegisterFuncAction) Before ¶ added in v0.2.1
func (a *RegisterFuncAction) Before(f func(*shape.Func)) *RegisterFuncAction
func (*RegisterFuncAction) DefaultInput ¶ added in v0.2.1
func (a *RegisterFuncAction) DefaultInput(value interface{}) *RegisterFuncAction
func (*RegisterFuncAction) Description ¶ added in v0.1.0
func (a *RegisterFuncAction) Description(description string) *RegisterFuncAction
func (*RegisterFuncAction) Error ¶ added in v0.3.0
func (a *RegisterFuncAction) Error(value interface{}, description string) *RegisterFuncAction
func (*RegisterFuncAction) Example ¶ added in v0.1.0
func (a *RegisterFuncAction) Example(code int, mime string, title, description string, value interface{}) *RegisterFuncAction
func (*RegisterFuncAction) Headers ¶ added in v0.3.0
func (a *RegisterFuncAction) Headers(values ...Header) *RegisterFuncAction
func (*RegisterFuncAction) Status ¶ added in v0.1.0
func (a *RegisterFuncAction) Status(code int) *RegisterFuncAction
func (*RegisterFuncAction) Tags ¶ added in v0.3.0
func (a *RegisterFuncAction) Tags(tags ...string) *RegisterFuncAction
type RegisterTypeAction ¶ added in v0.0.9
type RegisterTypeAction struct {
// contains filtered or unexported fields
}
func (*RegisterTypeAction) After ¶ added in v0.0.9
func (a *RegisterTypeAction) After(f func(*openapi3.Schema)) *RegisterTypeAction
func (*RegisterTypeAction) Before ¶ added in v0.1.0
func (a *RegisterTypeAction) Before(f func(*shape.Shape)) *RegisterTypeAction
func (*RegisterTypeAction) Default ¶ added in v0.1.0
func (a *RegisterTypeAction) Default(value interface{}) *RegisterTypeAction
func (*RegisterTypeAction) Description ¶ added in v0.1.0
func (a *RegisterTypeAction) Description(description string) *RegisterTypeAction
func (*RegisterTypeAction) Enum ¶ added in v0.1.0
func (a *RegisterTypeAction) Enum(values ...interface{}) *RegisterTypeAction
func (*RegisterTypeAction) Example ¶ added in v0.1.0
func (a *RegisterTypeAction) Example(value interface{}) *RegisterTypeAction
type Resolver ¶
type Resolver interface { ResolveSchema(v *openapi3.Schema, s *shape.Shape, typ Direction) *openapi3.SchemaRef ResolveParameter(v *openapi3.Parameter, s *shape.Shape) *openapi3.ParameterRef ResolveRequestBody(v *openapi3.RequestBody, s *shape.Shape) *openapi3.RequestBodyRef ResolveResponse(v *openapi3.Response, s *shape.Shape) *openapi3.ResponseRef }
type TagNameOption ¶ added in v0.2.0
type TagNameOption struct { NameTag string RequiredTag string ParamTypeTag string OverrideTag string DescriptionTag string XNewTypeTag string }
func DefaultTagNameOption ¶ added in v0.2.0
func DefaultTagNameOption() *TagNameOption
type Transformer ¶
type Transformer struct { Resolver Selector Selector Extractor Extractor TagNameOption TagNameOption CacheHit int IsRequired func(reflect.StructTag) bool Fset *token.FileSet GoPositionFunc func(fset *token.FileSet, fn *shape.Func) string // contains filtered or unexported fields }
func (*Transformer) Builtin ¶
func (t *Transformer) Builtin() *Transformer
func (*Transformer) RegisterInterception ¶ added in v0.0.2
func (*Transformer) Transform ¶
func (t *Transformer) Transform(s *shape.Shape) interface{}
type UseRefResolver ¶
type UseRefResolver struct { *NameStore // for Binder DisableInputRef bool DisableOutputRef bool AdditionalPropertiesAllowed *bool // set as Config.StrictSchema }
func (*UseRefResolver) ResolveParameter ¶
func (r *UseRefResolver) ResolveParameter(v *openapi3.Parameter, s *shape.Shape) *openapi3.ParameterRef
func (*UseRefResolver) ResolveRequestBody ¶
func (r *UseRefResolver) ResolveRequestBody(v *openapi3.RequestBody, s *shape.Shape) *openapi3.RequestBodyRef
func (*UseRefResolver) ResolveResponse ¶
func (r *UseRefResolver) ResolveResponse(v *openapi3.Response, s *shape.Shape) *openapi3.ResponseRef
func (*UseRefResolver) ResolveSchema ¶
type Visitor ¶
type Visitor struct { *Transformer Doc *openapi3.T Schemas map[int]*openapi3.Schema Operations map[int]*openapi3.Operation EnableAutoTag bool }
not visitor pattern
func NewVisitor ¶
func NewVisitor(tagNameOption TagNameOption, resolver Resolver, selector Selector, extractor Extractor) *Visitor
Source Files ¶
Click to show internal directories.
Click to hide internal directories.