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 Manager
- func (m *Manager) RegisterFunc(fn interface{}, 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) Before(f func(*shape.Func)) *RegisterFuncAction
- func (a *RegisterFuncAction) DefaultInput(value interface{}) *RegisterFuncAction
- func (a *RegisterFuncAction) Description(description string) *RegisterFuncAction
- func (a *RegisterFuncAction) Example(code int, mime string, title, description string, value interface{}) *RegisterFuncAction
- func (a *RegisterFuncAction) Status(code int) *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) *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
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
DisableInputRef bool
DisableOutputRef bool
DefaultError interface{}
IsRequiredCheckFunction func(reflect.StructTag) bool // handling required, default is always false
}
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" required:"true" openapi-override:"{'pattern': '^[A-Z][-A-Za-z]+$'}"`
Age int `json:"age"` // 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,
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("", "\t")
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" ], "type": "object" } } }, "info": { "description": "-", "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": { "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": { "items": { "$ref": "#/components/schemas/Owner" }, "type": "array" } } }, "description": "" }, "default": { "description": "" } }, "summary": "Returns list of owners." } } }, "servers": [ { "description": "local development server", "url": "http://localhost:8888" } ] }
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
func (s *FirstParamInputSelector) SelectInput(fn *shape.Func) *shape.Shape
type FirstParamOutputSelector ¶ added in v0.0.6
type FirstParamOutputSelector struct{}
func (*FirstParamOutputSelector) SelectOutput ¶ added in v0.0.6
func (s *FirstParamOutputSelector) SelectOutput(fn *shape.Func) *shape.Shape
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) 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
func (s *MergeParamsInputSelector) SelectInput(fn *shape.Func) *shape.Shape
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) 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) Example ¶ added in v0.1.0
func (a *RegisterFuncAction) Example(code int, mime string, title, description string, value interface{}) *RegisterFuncAction
func (*RegisterFuncAction) Status ¶ added in v0.1.0
func (a *RegisterFuncAction) Status(code int) *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
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
// 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
}
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.