reflectopenapi

package module
v0.0.13 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 1, 2021 License: Apache-2.0 Imports: 14 Imported by: 16

README

reflect-openapi

Define openapi.json with reflect package.

examples

Some examples are here. ./_examples

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewDoc

func NewDoc() (*openapi3.T, error)

func NewDocFromSkeleton

func NewDocFromSkeleton(spec []byte) (*openapi3.T, error)

TODO: add api function

Types

type Binder

type Binder interface {
	BindSchemas(doc *openapi3.T)
}

type Config added in v0.0.2

type Config struct {
	Doc *openapi3.T

	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

	DefaultError            interface{}
	IsRequiredCheckFunction func(reflect.StructTag) bool // handling required, default is always false
}

func (*Config) BuildDoc added in v0.0.2

func (c *Config) BuildDoc(ctx context.Context, use func(m *Manager)) (*openapi3.T, error)

func (*Config) DefaultExtractor added in v0.0.6

func (c *Config) DefaultExtractor() Extractor

func (*Config) DefaultResolver added in v0.0.6

func (c *Config) DefaultResolver() Resolver

func (*Config) DefaultSelector added in v0.0.6

func (c *Config) DefaultSelector() Selector

func (*Config) EmitDoc added in v0.0.3

func (c *Config) EmitDoc(use func(m *Manager))

func (*Config) NewManager added in v0.0.13

func (c *Config) NewManager() (*Manager, func(ctx context.Context) error, error)

type DefaultSelector added in v0.0.6

type DefaultSelector struct {
	FirstParamInputSelector
	FirstParamOutputSelector
}

type Extractor added in v0.0.6

type Extractor interface {
	Extract(interface{}) shape.Shape
}

type FirstParamInputSelector added in v0.0.6

type FirstParamInputSelector struct{}

func (*FirstParamInputSelector) SelectInput added in v0.0.6

func (s *FirstParamInputSelector) SelectInput(fn shape.Function) 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.Function) 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) RegisterType added in v0.0.9

func (m *Manager) RegisterType(ob interface{}, modifiers ...func(*openapi3.Schema)) *RegisterTypeAction

type MergeParamsInputSelector added in v0.0.6

type MergeParamsInputSelector struct{}

func (*MergeParamsInputSelector) SelectInput added in v0.0.6

func (s *MergeParamsInputSelector) SelectInput(fn shape.Function) 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

func (ns *NameStore) BindSchemas(doc *openapi3.T)

func (*NameStore) GetOrCreatePair added in v0.0.9

func (ns *NameStore) GetOrCreatePair(v *openapi3.Schema, name string, shape shape.Shape) *RefPair

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

func (r *NoRefResolver) ResolveSchema(v *openapi3.Schema, s shape.Shape) *openapi3.SchemaRef

type RefPair added in v0.0.9

type RefPair struct {
	Name  string
	Shape shape.Shape

	Def *openapi3.SchemaRef
	Ref *openapi3.SchemaRef
}

type RegisterFuncAction added in v0.0.9

type RegisterFuncAction struct {
	// contains filtered or unexported fields
}

func (*RegisterFuncAction) After added in v0.0.9

type RegisterTypeAction added in v0.0.9

type RegisterTypeAction struct {
	// contains filtered or unexported fields
}

func (*RegisterTypeAction) After added in v0.0.9

type Resolver

type Resolver interface {
	ResolveSchema(v *openapi3.Schema, s shape.Shape) *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 Selector added in v0.0.6

type Selector interface {
	SelectInput(shape.Function) shape.Shape
	SelectOutput(shape.Function) shape.Shape
}

type Transformer

type Transformer struct {
	Resolver
	Selector Selector

	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 (t *Transformer) RegisterInterception(rt reflect.Type, intercept func(shape.Shape) *openapi3.Schema)

func (*Transformer) Transform

func (t *Transformer) Transform(s shape.Shape) interface{}

type UseRefResolver

type UseRefResolver struct {
	*NameStore // for Binder

	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

func (r *UseRefResolver) ResolveSchema(v *openapi3.Schema, s shape.Shape) *openapi3.SchemaRef

type Visitor

type Visitor struct {
	*Transformer
	CommentLookup *comment.Lookup

	Doc        *openapi3.T
	Schemas    map[shape.Identity]*openapi3.Schema
	Operations map[shape.Identity]*openapi3.Operation
	// contains filtered or unexported fields
}

not visitor pattern

func NewVisitor

func NewVisitor(resolver Resolver, selector Selector, extractor Extractor) *Visitor

func (*Visitor) VisitFunc

func (v *Visitor) VisitFunc(ob interface{}, modifiers ...func(*openapi3.Operation)) *openapi3.Operation

func (*Visitor) VisitType

func (v *Visitor) VisitType(ob interface{}, modifiers ...func(*openapi3.Schema)) *openapi3.SchemaRef

Directories

Path Synopsis
_examples module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL