Documentation ¶
Overview ¶
Package oakmux is a tree HTTP router with generic domain adaptors.
Index ¶
- Constants
- Variables
- func Must[T any](this T, err error) T
- type Branches
- type Error
- type Handler
- func ApplyMiddleware(h Handler, middleware ...Middleware) Handler
- func New(withOptions ...Option) (Handler, error)
- func NewHostMux(withOptions ...HostMuxOption) (Handler, error)
- func NewMethodMux(withOptions ...MethodMuxOption) (Handler, error)
- func NewPermanentRedirect(to string) Handler
- func NewTemporaryRedirect(to string) Handler
- type HandlerFunc
- type HostMuxOption
- type MatchedFields
- func (m *MatchedFields) Int(name string, value *int) error
- func (m *MatchedFields) Int64(name string, value *int64) error
- func (m *MatchedFields) Page(name string, value *int) error
- func (m *MatchedFields) Str(name string, value *string) error
- func (m *MatchedFields) Uint(name string, value *uint) error
- func (m *MatchedFields) Uint64(name string, value *uint64) error
- type MethodMuxOption
- func WithDelete(h Handler) MethodMuxOption
- func WithDeleteCustomFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], ...) MethodMuxOption
- func WithDeleteCustomStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithDeleteCustomVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], ...) MethodMuxOption
- func WithDeleteFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), mws ...Middleware) MethodMuxOption
- func WithDeleteHandler(h Handler, mws ...Middleware) MethodMuxOption
- func WithDeleteNullaryCustomFunc[O any](domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], ...) MethodMuxOption
- func WithDeleteNullaryFunc[O any](domainCall func(context.Context) (O, error), mws ...Middleware) MethodMuxOption
- func WithDeleteStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithDeleteStringVoidFunc(domainCall func(context.Context, string) error, ...) MethodMuxOption
- func WithDeleteVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, mws ...Middleware) MethodMuxOption
- func WithGetCustomFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], ...) MethodMuxOption
- func WithGetCustomStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithGetCustomVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], ...) MethodMuxOption
- func WithGetFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), mws ...Middleware) MethodMuxOption
- func WithGetHandler(h Handler, mws ...Middleware) MethodMuxOption
- func WithGetNullaryCustomFunc[O any](domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], ...) MethodMuxOption
- func WithGetNullaryFunc[O any](domainCall func(context.Context) (O, error), mws ...Middleware) MethodMuxOption
- func WithGetStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithGetStringVoidFunc(domainCall func(context.Context, string) error, ...) MethodMuxOption
- func WithGetVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, mws ...Middleware) MethodMuxOption
- func WithPatch(h Handler) MethodMuxOption
- func WithPatchCustomFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], ...) MethodMuxOption
- func WithPatchCustomStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPatchCustomVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], ...) MethodMuxOption
- func WithPatchFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), mws ...Middleware) MethodMuxOption
- func WithPatchHandler(h Handler, mws ...Middleware) MethodMuxOption
- func WithPatchNullaryCustomFunc[O any](domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], ...) MethodMuxOption
- func WithPatchNullaryFunc[O any](domainCall func(context.Context) (O, error), mws ...Middleware) MethodMuxOption
- func WithPatchStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPatchStringVoidFunc(domainCall func(context.Context, string) error, ...) MethodMuxOption
- func WithPatchVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, mws ...Middleware) MethodMuxOption
- func WithPost(h Handler) MethodMuxOption
- func WithPostCustomFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], ...) MethodMuxOption
- func WithPostCustomStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPostCustomVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], ...) MethodMuxOption
- func WithPostFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), mws ...Middleware) MethodMuxOption
- func WithPostHandler(h Handler, mws ...Middleware) MethodMuxOption
- func WithPostNullaryCustomFunc[O any](domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], ...) MethodMuxOption
- func WithPostNullaryFunc[O any](domainCall func(context.Context) (O, error), mws ...Middleware) MethodMuxOption
- func WithPostStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPostStringVoidFunc(domainCall func(context.Context, string) error, ...) MethodMuxOption
- func WithPostVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, mws ...Middleware) MethodMuxOption
- func WithPut(h Handler) MethodMuxOption
- func WithPutCustomFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], ...) MethodMuxOption
- func WithPutCustomStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPutCustomVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], ...) MethodMuxOption
- func WithPutFunc[T any, V adapt.Validatable[T], O any](domainCall func(context.Context, V) (O, error), mws ...Middleware) MethodMuxOption
- func WithPutHandler(h Handler, mws ...Middleware) MethodMuxOption
- func WithPutNullaryCustomFunc[O any](domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], ...) MethodMuxOption
- func WithPutNullaryFunc[O any](domainCall func(context.Context) (O, error), mws ...Middleware) MethodMuxOption
- func WithPutStringFunc[O any](domainCall func(context.Context, string) (O, error), ...) MethodMuxOption
- func WithPutStringVoidFunc(domainCall func(context.Context, string) error, ...) MethodMuxOption
- func WithPutVoidFunc[T any, V adapt.Validatable[T]](domainCall func(context.Context, V) error, mws ...Middleware) MethodMuxOption
- type Middleware
- type Node
- type Option
- func WithDefaultRequestReadLimitOf1MB() Option
- func WithLimitlessRequestBytes() Option
- func WithMiddleware(mws ...Middleware) Option
- func WithOptions(withOptions ...Option) Option
- func WithPrefix(p string) Option
- func WithRequestReadLimitOf(maximumBytes int64) Option
- func WithRouteCustomFunc[T any, V adapt.Validatable[T], O any](name, pattern string, domainCall func(context.Context, V) (O, error), ...) Option
- func WithRouteCustomStringFunc[O any](name, pattern string, domainCall func(context.Context, string) (O, error), ...) Option
- func WithRouteCustomVoidFunc[T any, V adapt.Validatable[T]](name, pattern string, domainCall func(context.Context, V) error, ...) Option
- func WithRouteFunc[T any, V adapt.Validatable[T], O any](name, pattern string, domainCall func(context.Context, V) (O, error), ...) Option
- func WithRouteHandler(name, pattern string, h Handler, mws ...Middleware) Option
- func WithRouteNullaryCustomFunc[O any](name, pattern string, domainCall func(context.Context) (O, error), ...) Option
- func WithRouteNullaryFunc[O any](name, pattern string, domainCall func(context.Context) (O, error), ...) Option
- func WithRouteStringFunc[O any](name, pattern string, domainCall func(context.Context, string) (O, error), ...) Option
- func WithRouteStringVoidFunc(name, pattern string, domainCall func(context.Context, string) error, ...) Option
- func WithRouteVoidFunc[T any, V adapt.Validatable[T]](name, pattern string, domainCall func(context.Context, V) error, ...) Option
- func WithoutTrailingSlashRedirects() Option
- func WithoutTrailingSlashRedirectsFromSlash() Option
- func WithoutTrailingSlashRedirectsToSlash() Option
- type RequestReadLimiter
- type Route
- type RoutingContext
- type RoutingError
- type Segment
- type SegmentType
- type UnknownHostError
- type WalkFunc
Constants ¶
const ( SegmentTypeUnknown = iota SegmentTypeStatic SegmentTypeDynamic SegmentTypeTerminal SegmentTypeTrailingSlash )
const DefaultRequestReadLimitOf1MB = 1 << 20
Variables ¶
var ( ErrDoubleSlash = NewRoutingError(errors.New("path contains double slash")) ErrPathNotFound = NewRoutingError(errors.New("path not found")) ErrNotInteger = NewRoutingError(errors.New("field is not an integer")) ErrNotUnsignedInteger = NewRoutingError(errors.New("field is not an unsigned integer")) ErrNotPageNumber = NewRoutingError(errors.New("field is not an page number")) )
Functions ¶
Types ¶
type Branches ¶
Branches abstracts either map or list implementation for child [Node]s for performance. When there are more than [optimalMimimumBranchMapSize], the map implementation is prefered for faster look up.
TODO: John Amsterdam's implementation switched to generics instead of hybrid. Would it be faster than asserting the interface? Should not be. At GopherConEU he said that interfaces block compiler's escape analysis. Should this be re-written using generics?
type Handler ¶
type Handler interface {
ServeHyperText(http.ResponseWriter, *http.Request) error
}
func ApplyMiddleware ¶
func ApplyMiddleware(h Handler, middleware ...Middleware) Handler
ApplyMiddleware applies Middleware to a Handler in reverse to preserve the logical order.
func NewHostMux ¶
func NewHostMux(withOptions ...HostMuxOption) (Handler, error)
NewHostMux creates a Handler that multiplexes by http.Request host name.
func NewMethodMux ¶
func NewMethodMux(withOptions ...MethodMuxOption) (Handler, error)
func NewPermanentRedirect ¶
func NewTemporaryRedirect ¶
type HandlerFunc ¶
type HandlerFunc func(http.ResponseWriter, *http.Request) error
func (HandlerFunc) ServeHyperText ¶
func (f HandlerFunc) ServeHyperText(w http.ResponseWriter, r *http.Request) error
type HostMuxOption ¶
type HostMuxOption func(*hostMuxOptions) error
func WithHostHandler ¶
func WithHostHandler(host string, handler Handler) HostMuxOption
type MatchedFields ¶
type MatchedFields struct {
// contains filtered or unexported fields
}
type MethodMuxOption ¶
type MethodMuxOption func(*methodMuxOptions) error
func WithDelete ¶
func WithDelete(h Handler) MethodMuxOption
func WithDeleteCustomFunc ¶
func WithDeleteCustomFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], mws ...Middleware, ) MethodMuxOption
func WithDeleteCustomVoidFunc ¶
func WithDeleteCustomVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], mws ...Middleware, ) MethodMuxOption
func WithDeleteFunc ¶
func WithDeleteFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), mws ...Middleware, ) MethodMuxOption
func WithDeleteHandler ¶
func WithDeleteHandler(h Handler, mws ...Middleware) MethodMuxOption
func WithDeleteNullaryCustomFunc ¶
func WithDeleteNullaryCustomFunc[O any]( domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], mws ...Middleware, ) MethodMuxOption
func WithDeleteNullaryFunc ¶
func WithDeleteNullaryFunc[O any]( domainCall func(context.Context) (O, error), mws ...Middleware, ) MethodMuxOption
func WithDeleteStringFunc ¶
func WithDeleteStringVoidFunc ¶
func WithDeleteStringVoidFunc( domainCall func(context.Context, string) error, extractor func(*http.Request) (string, error), mws ...Middleware, ) MethodMuxOption
func WithDeleteVoidFunc ¶
func WithDeleteVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, mws ...Middleware, ) MethodMuxOption
func WithGetCustomFunc ¶
func WithGetCustomFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], mws ...Middleware, ) MethodMuxOption
func WithGetCustomStringFunc ¶
func WithGetCustomVoidFunc ¶
func WithGetCustomVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], mws ...Middleware, ) MethodMuxOption
func WithGetFunc ¶
func WithGetFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), mws ...Middleware, ) MethodMuxOption
func WithGetHandler ¶
func WithGetHandler(h Handler, mws ...Middleware) MethodMuxOption
func WithGetNullaryCustomFunc ¶
func WithGetNullaryCustomFunc[O any]( domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], mws ...Middleware, ) MethodMuxOption
func WithGetNullaryFunc ¶
func WithGetNullaryFunc[O any]( domainCall func(context.Context) (O, error), mws ...Middleware, ) MethodMuxOption
func WithGetStringFunc ¶
func WithGetStringVoidFunc ¶
func WithGetStringVoidFunc( domainCall func(context.Context, string) error, extractor func(*http.Request) (string, error), mws ...Middleware, ) MethodMuxOption
func WithGetVoidFunc ¶
func WithGetVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, mws ...Middleware, ) MethodMuxOption
func WithPatch ¶
func WithPatch(h Handler) MethodMuxOption
func WithPatchCustomFunc ¶
func WithPatchCustomFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], mws ...Middleware, ) MethodMuxOption
func WithPatchCustomVoidFunc ¶
func WithPatchCustomVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], mws ...Middleware, ) MethodMuxOption
func WithPatchFunc ¶
func WithPatchFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPatchHandler ¶
func WithPatchHandler(h Handler, mws ...Middleware) MethodMuxOption
func WithPatchNullaryCustomFunc ¶
func WithPatchNullaryCustomFunc[O any]( domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], mws ...Middleware, ) MethodMuxOption
func WithPatchNullaryFunc ¶
func WithPatchNullaryFunc[O any]( domainCall func(context.Context) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPatchStringFunc ¶
func WithPatchStringVoidFunc ¶
func WithPatchStringVoidFunc( domainCall func(context.Context, string) error, extractor func(*http.Request) (string, error), mws ...Middleware, ) MethodMuxOption
func WithPatchVoidFunc ¶
func WithPatchVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, mws ...Middleware, ) MethodMuxOption
func WithPost ¶
func WithPost(h Handler) MethodMuxOption
func WithPostCustomFunc ¶
func WithPostCustomFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], mws ...Middleware, ) MethodMuxOption
func WithPostCustomVoidFunc ¶
func WithPostCustomVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], mws ...Middleware, ) MethodMuxOption
func WithPostFunc ¶
func WithPostFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPostHandler ¶
func WithPostHandler(h Handler, mws ...Middleware) MethodMuxOption
func WithPostNullaryCustomFunc ¶
func WithPostNullaryCustomFunc[O any]( domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], mws ...Middleware, ) MethodMuxOption
func WithPostNullaryFunc ¶
func WithPostNullaryFunc[O any]( domainCall func(context.Context) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPostStringFunc ¶
func WithPostStringVoidFunc ¶
func WithPostStringVoidFunc( domainCall func(context.Context, string) error, extractor func(*http.Request) (string, error), mws ...Middleware, ) MethodMuxOption
func WithPostVoidFunc ¶
func WithPostVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, mws ...Middleware, ) MethodMuxOption
func WithPut ¶
func WithPut(h Handler) MethodMuxOption
func WithPutCustomFunc ¶
func WithPutCustomFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), codec adapt.Codec[T, V, O], mws ...Middleware, ) MethodMuxOption
func WithPutCustomStringFunc ¶
func WithPutCustomVoidFunc ¶
func WithPutCustomVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, codec adapt.Codec[T, V, T], mws ...Middleware, ) MethodMuxOption
func WithPutFunc ¶
func WithPutFunc[T any, V adapt.Validatable[T], O any]( domainCall func(context.Context, V) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPutHandler ¶
func WithPutHandler(h Handler, mws ...Middleware) MethodMuxOption
func WithPutNullaryCustomFunc ¶
func WithPutNullaryCustomFunc[O any]( domainCall func(context.Context) (O, error), encoder adapt.Encoder[O], mws ...Middleware, ) MethodMuxOption
func WithPutNullaryFunc ¶
func WithPutNullaryFunc[O any]( domainCall func(context.Context) (O, error), mws ...Middleware, ) MethodMuxOption
func WithPutStringFunc ¶
func WithPutStringVoidFunc ¶
func WithPutStringVoidFunc( domainCall func(context.Context, string) error, extractor func(*http.Request) (string, error), mws ...Middleware, ) MethodMuxOption
func WithPutVoidFunc ¶
func WithPutVoidFunc[T any, V adapt.Validatable[T]]( domainCall func(context.Context, V) error, mws ...Middleware, ) MethodMuxOption
type Middleware ¶
func NewRequestReadLimiterMiddleware ¶
func NewRequestReadLimiterMiddleware(readLimit int64) Middleware
type Node ¶
type Node struct { Leaf *Route TrailingSlashLeaf *Route TerminalLeaf *Route Branches Branches DynamicBranch *Node }
Node is the nesting routing tree component.
type Option ¶
type Option func(*options) error
func WithDefaultRequestReadLimitOf1MB ¶
func WithDefaultRequestReadLimitOf1MB() Option
func WithLimitlessRequestBytes ¶
func WithLimitlessRequestBytes() Option
func WithMiddleware ¶
func WithMiddleware(mws ...Middleware) Option
func WithOptions ¶
func WithPrefix ¶
func WithRequestReadLimitOf ¶
func WithRouteCustomFunc ¶
func WithRouteCustomVoidFunc ¶
func WithRouteFunc ¶
func WithRouteFunc[T any, V adapt.Validatable[T], O any]( name, pattern string, domainCall func(context.Context, V) (O, error), mws ...Middleware, ) Option
func WithRouteHandler ¶
func WithRouteHandler(name, pattern string, h Handler, mws ...Middleware) Option
func WithRouteNullaryFunc ¶
func WithRouteStringFunc ¶
func WithRouteStringVoidFunc ¶
func WithRouteVoidFunc ¶
func WithRouteVoidFunc[T any, V adapt.Validatable[T]]( name, pattern string, domainCall func(context.Context, V) error, mws ...Middleware, ) Option
func WithoutTrailingSlashRedirects ¶
func WithoutTrailingSlashRedirects() Option
func WithoutTrailingSlashRedirectsFromSlash ¶
func WithoutTrailingSlashRedirectsFromSlash() Option
func WithoutTrailingSlashRedirectsToSlash ¶
func WithoutTrailingSlashRedirectsToSlash() Option
type RequestReadLimiter ¶
type RequestReadLimiter struct {
// contains filtered or unexported fields
}
func NewRequestReadLimiter ¶
func NewRequestReadLimiter(next Handler, readLimit int64) *RequestReadLimiter
func (*RequestReadLimiter) ServeHyperText ¶
func (l *RequestReadLimiter) ServeHyperText( w http.ResponseWriter, r *http.Request, ) error
type RoutingContext ¶
type RoutingContext struct {
// contains filtered or unexported fields
}
func GetRoutingContext ¶
func GetRoutingContext(ctx context.Context) *RoutingContext
func (*RoutingContext) MatchedFields ¶
func (r *RoutingContext) MatchedFields() *MatchedFields
type RoutingError ¶
type RoutingError struct {
// contains filtered or unexported fields
}
func NewRoutingError ¶
func NewRoutingError(cause error) *RoutingError
func (*RoutingError) Error ¶
func (e *RoutingError) Error() string
func (*RoutingError) HyperTextStatusCode ¶
func (e *RoutingError) HyperTextStatusCode() int
func (*RoutingError) LogValue ¶
func (e *RoutingError) LogValue() slog.Value
func (*RoutingError) Unwrap ¶
func (e *RoutingError) Unwrap() error
type Segment ¶
type SegmentType ¶
type SegmentType uint8
func (SegmentType) String ¶
func (s SegmentType) String() string
type UnknownHostError ¶
type UnknownHostError struct {
// contains filtered or unexported fields
}
func (*UnknownHostError) Error ¶
func (e *UnknownHostError) Error() string
func (*UnknownHostError) HyperTextStatusCode ¶
func (e *UnknownHostError) HyperTextStatusCode() int
func (*UnknownHostError) LogValue ¶
func (e *UnknownHostError) LogValue() slog.Value
Source Files ¶
Directories ¶
Path | Synopsis |
---|---|
Package adapt provides domain logic adaptors shaped to [oakmux.Handler].
|
Package adapt provides domain logic adaptors shaped to [oakmux.Handler]. |
examples
|
|
domaincalls
Package main demonstrates routing directly to domain function calls.
|
Package main demonstrates routing directly to domain function calls. |
methods
Package main demonstrates routing directly to domain function calls.
|
Package main demonstrates routing directly to domain function calls. |
staticfs
Package main demonstrates the basic use of [staticfs.FS]
|
Package main demonstrates the basic use of [staticfs.FS] |
Package staticfs adapts [http.FS] to [oakmux.Handler] signature.
|
Package staticfs adapts [http.FS] to [oakmux.Handler] signature. |