Documentation
¶
Index ¶
- Variables
- func NewInput(inputStruct interface{}, opts ...option) func(http.Handler) http.Handler
- func RegisterDirectiveExecutor(name string, exe DirectiveExecutor)
- func RegisterTypeDecoder(typ reflect.Type, decoder TypeDecoder)
- func ReplaceDirectiveExecutor(name string, exe DirectiveExecutor)
- func ReplaceTypeDecoder(typ reflect.Type, decoder TypeDecoder)
- func UseGorillaMux(executor string, fnVars MuxVarsFunc)
- func WithErrorStatusCode(code int) option
- type ContextKey
- type DirectiveContext
- type DirectiveExecutor
- type DirectiveExecutorFunc
- type Engine
- type InvalidFieldError
- type MuxVarsFunc
- type TypeDecoder
- type TypeDecoderFunc
- type UnsupportedTypeError
Constants ¶
This section is empty.
Variables ¶
var ( ErrMissingField = errors.New("missing required field") ErrUnsupporetedType = errors.New("unsupported type") ErrUnregisteredExecutor = errors.New("unregistered executor") ErrDuplicateTypeDecoder = errors.New("duplicate type decoder") ErrNilTypeDecoder = errors.New("nil type decoder") ErrDuplicateExecutor = errors.New("duplicate executor") ErrNilExecutor = errors.New("nil executor") )
Functions ¶
func NewInput ¶
NewInput creates a "Middleware Constructor" for making a chain, which acts as a list of http.Handler constructors. We recommend using https://github.com/justinas/alice to chain your HTTP middleware functions and the app handler.
func RegisterDirectiveExecutor ¶
func RegisterDirectiveExecutor(name string, exe DirectiveExecutor)
RegisterDirectiveExecutor registers a named executor globally, which implemented the DirectiveExecutor interface. Will panic if the name were taken or nil executor.
func RegisterTypeDecoder ¶ added in v0.2.2
func RegisterTypeDecoder(typ reflect.Type, decoder TypeDecoder)
RegisterTypeDecoder registers a specific type decoder. Panics on conflicts.
func ReplaceDirectiveExecutor ¶
func ReplaceDirectiveExecutor(name string, exe DirectiveExecutor)
ReplaceDirectiveExecutor works like RegisterDirectiveExecutor without panic on duplicate names.
func ReplaceTypeDecoder ¶ added in v0.2.2
func ReplaceTypeDecoder(typ reflect.Type, decoder TypeDecoder)
ReplaceTypeDecoder replaces a specific type decoder.
func UseGorillaMux ¶
func UseGorillaMux(executor string, fnVars MuxVarsFunc)
UseGorillaMux registers a new directive executor which can extract path variables from the URL. Which works as an accompany to gorilla's mux package.
Example:
UseGorillaMux("path", mux.Vars)
type GetUserInput struct {
UserID `httpin:"path=user_id"`
}
func WithErrorStatusCode ¶
func WithErrorStatusCode(code int) option
WithErrorStatusCode configures the HTTP status code sent to the client when decoding a request failed. Which is used in the `NewInput` middleware. The default value is 422.
Types ¶
type ContextKey ¶
type ContextKey int
const ( Input ContextKey = iota // the primary key to get the input object in the context injected by httpin // Set this context value to true to indicate that the field has been set. // When multiple executors were applied to a field, if the field value were set by // an executor, the latter executors may skip running by consulting this context value. FieldSet )
type DirectiveContext ¶
type DirectiveContext struct {
ValueType reflect.Type
Value reflect.Value
Request *http.Request
Context context.Context
// contains filtered or unexported fields
}
DirectiveContext holds essential information about the field being resolved and the active HTTP request. Working as the context in a directive executor.
func (*DirectiveContext) DeliverContextValue ¶
func (c *DirectiveContext) DeliverContextValue(key, value interface{})
DeliverContextValue binds a value to the specified key in the context. And it will be delivered among the executors in the same field resolver.
func (*DirectiveContext) Execute ¶
func (d *DirectiveContext) Execute(ctx *DirectiveContext) error
Execute locates the executor and runs it with the specified context.
type DirectiveExecutor ¶
type DirectiveExecutor interface {
Execute(*DirectiveContext) error
}
DirectiveExecutor is the interface implemented by a "directive executor".
type DirectiveExecutorFunc ¶
type DirectiveExecutorFunc func(*DirectiveContext) error
DirectiveExecutorFunc is an adpator to allow to use of ordinary functions as httpin.DirectiveExecutor.
func (DirectiveExecutorFunc) Execute ¶
func (f DirectiveExecutorFunc) Execute(ctx *DirectiveContext) error
Execute calls f(ctx).
type Engine ¶ added in v0.2.1
type Engine struct {
// contains filtered or unexported fields
}
Engine holds the information on how to decode a request to an instance of a concrete struct type.
type InvalidFieldError ¶
type InvalidFieldError struct {
// Field is the name of the field.
Field string `json:"field"`
// Source is the directive which causes the error.
// e.g. form, header, required, etc.
Source string `json:"source"`
// Value is the input data.
Value interface{} `json:"value"`
ErrorMessage string `json:"error"`
// contains filtered or unexported fields
}
func (*InvalidFieldError) Error ¶
func (f *InvalidFieldError) Error() string
func (*InvalidFieldError) Unwrap ¶
func (f *InvalidFieldError) Unwrap() error
type TypeDecoder ¶ added in v0.2.2
type TypeDecoder = internal.TypeDecoder
TypeDecoder is the interface implemented by types that can decode bytes to themselves.
type TypeDecoderFunc ¶ added in v0.2.2
type TypeDecoderFunc = internal.TypeDecoderFunc
TypeDecoderFunc is an adaptor to allow the use of ordinary functions as httpin TypeDecoders.
type UnsupportedTypeError ¶
func (UnsupportedTypeError) Error ¶
func (e UnsupportedTypeError) Error() string
func (UnsupportedTypeError) Unwrap ¶
func (e UnsupportedTypeError) Unwrap() error