mux

package
v0.82.0 Latest Latest
Warning

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

Go to latest
Published: Jan 2, 2026 License: BSD-3-Clause Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var HandlerNeedsTasksCtxImplReflectType = reflectutil.ToInterfaceReflectType[TasksCtxRequirer]()

Functions

func FindNestedMatches

func FindNestedMatches(nestedRouter *NestedRouter, r *http.Request) (*matcher.FindNestedMatchesResults, bool)

func GetParam

func GetParam(r *http.Request, key string) string

func GetSplatValues

func GetSplatValues(r *http.Request) []string

func GetTasksCtx

func GetTasksCtx(r *http.Request) *tasks.Ctx

func InjectTasksCtxMiddleware

func InjectTasksCtxMiddleware(next http.Handler) http.Handler

func RegisterNestedPatternWithoutHandler

func RegisterNestedPatternWithoutHandler(router *NestedRouter, pattern string)

func SetGlobalHTTPMiddleware

func SetGlobalHTTPMiddleware(router *Router, httpMw HTTPMiddleware, opts ...*MiddlewareOptions)

func SetGlobalNotFoundHTTPHandler

func SetGlobalNotFoundHTTPHandler(router *Router, httpHandler http.Handler)

func SetGlobalTaskMiddleware

func SetGlobalTaskMiddleware[O any](router *Router, taskMw *TaskMiddleware[O], opts ...*MiddlewareOptions)

func SetMethodLevelHTTPMiddleware

func SetMethodLevelHTTPMiddleware(router *Router, method string, httpMw HTTPMiddleware, opts ...*MiddlewareOptions)

func SetMethodLevelTaskMiddleware

func SetMethodLevelTaskMiddleware[O any](
	router *Router, method string, taskMw *TaskMiddleware[O], opts ...*MiddlewareOptions,
)

func SetPatternLevelHTTPMiddleware

func SetPatternLevelHTTPMiddleware[I any, O any](route *Route[I, O], httpMw HTTPMiddleware, opts ...*MiddlewareOptions)

func SetPatternLevelTaskMiddleware

func SetPatternLevelTaskMiddleware[PI any, PO any, MWO any](route *Route[PI, PO], taskMw *TaskMiddleware[MWO], opts ...*MiddlewareOptions)

Types

type AnyNestedRoute

type AnyNestedRoute interface {
	OriginalPattern() string
	genericsutil.AnyZeroHelper
	// contains filtered or unexported methods
}

type AnyRoute

type AnyRoute interface {
	OriginalPattern() string
	Method() string
	genericsutil.AnyZeroHelper
	// contains filtered or unexported methods
}

type HTTPMiddleware

type HTTPMiddleware = func(http.Handler) http.Handler

type MiddlewareOptions

type MiddlewareOptions struct {
	// Return true if the middleware should be run for this request.
	// If nil, the middleware will always run.
	If func(r *http.Request) bool
}

type NestedOptions

type NestedOptions struct {
	DynamicParamPrefixRune rune
	SplatSegmentRune       rune
	ExplicitIndexSegment   string
}

type NestedReqData

type NestedReqData = ReqData[None]

type NestedRoute

type NestedRoute[O any] struct {
	genericsutil.ZeroHelper[None, O]
	// contains filtered or unexported fields
}

func RegisterNestedTaskHandler

func RegisterNestedTaskHandler[O any](
	router *NestedRouter, pattern string, taskHandler *TaskHandler[None, O],
) *NestedRoute[O]

func (*NestedRoute[O]) OriginalPattern

func (route *NestedRoute[O]) OriginalPattern() string

type NestedRouter

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

func NewNestedRouter

func NewNestedRouter(opts *NestedOptions) *NestedRouter

func (*NestedRouter) AllRoutes

func (nr *NestedRouter) AllRoutes() map[string]AnyNestedRoute

func (*NestedRouter) GetDynamicParamPrefixRune

func (nr *NestedRouter) GetDynamicParamPrefixRune() rune

func (*NestedRouter) GetExplicitIndexSegment

func (nr *NestedRouter) GetExplicitIndexSegment() string

func (*NestedRouter) GetMatcher

func (nr *NestedRouter) GetMatcher() *matcher.Matcher

func (*NestedRouter) GetSplatSegmentRune

func (nr *NestedRouter) GetSplatSegmentRune() rune

func (*NestedRouter) HasTaskHandler

func (nr *NestedRouter) HasTaskHandler(originalPattern string) bool

func (*NestedRouter) IsRegistered

func (nr *NestedRouter) IsRegistered(originalPattern string) bool

type NestedTasksResult

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

func (*NestedTasksResult) Data

func (ntr *NestedTasksResult) Data() any

func (*NestedTasksResult) Err

func (ntr *NestedTasksResult) Err() error

func (*NestedTasksResult) OK

func (ntr *NestedTasksResult) OK() bool

func (*NestedTasksResult) Pattern

func (ntr *NestedTasksResult) Pattern() string

func (*NestedTasksResult) RanTask

func (ntr *NestedTasksResult) RanTask() bool

type NestedTasksResults

type NestedTasksResults struct {
	Params          Params
	SplatValues     []string
	Map             map[string]*NestedTasksResult
	Slice           []*NestedTasksResult
	ResponseProxies []*response.Proxy
}

func FindNestedMatchesAndRunTasks

func FindNestedMatchesAndRunTasks(nestedRouter *NestedRouter, r *http.Request) (*NestedTasksResults, bool)

func RunNestedTasks

func RunNestedTasks(
	nestedRouter *NestedRouter,
	r *http.Request,
	findNestedMatchesResults *matcher.FindNestedMatchesResults,
) *NestedTasksResults

func (*NestedTasksResults) GetHasTaskHandler

func (ntr *NestedTasksResults) GetHasTaskHandler(i int) bool

type None

type None = genericsutil.None

type Options

type Options struct {
	// Used for mounting a router at a specific path, e.g., "/api/". If set,
	// the router will strip the provided mount root from the beginning of
	// incoming url paths before matching them against registered patterns.
	MountRoot              string
	DynamicParamPrefixRune rune // Optional. Defaults to ':'.
	SplatSegmentRune       rune // Optional. Defaults to '*'.
	// Required if using task handlers. Do validation or whatever you want here,
	// and mutate the input ptr to the desired value (this is what will ultimately
	// be returned by c.Input()).
	ParseInput func(r *http.Request, inputPtr any) error
}

type Params

type Params = matcher.Params

func GetParams

func GetParams(r *http.Request) Params

type ReqData

type ReqData[I any] struct {
	// contains filtered or unexported fields
}

func (*ReqData[I]) Input

func (rd *ReqData[I]) Input() I

func (*ReqData[I]) Params

func (rd *ReqData[I]) Params() Params

func (*ReqData[I]) Request

func (rd *ReqData[I]) Request() *http.Request

func (*ReqData[I]) ResponseProxy

func (rd *ReqData[I]) ResponseProxy() *response.Proxy

func (*ReqData[I]) SplatValues

func (rd *ReqData[I]) SplatValues() []string

func (*ReqData[I]) TasksCtx

func (rd *ReqData[I]) TasksCtx() *tasks.Ctx

type Route

type Route[I, O any] struct {
	genericsutil.ZeroHelper[I, O]
	// contains filtered or unexported fields
}

func RegisterHandler

func RegisterHandler(
	router *Router, method, pattern string, httpHandler http.Handler,
) *Route[any, any]

func RegisterHandlerFunc

func RegisterHandlerFunc(
	router *Router, method, pattern string, httpHandlerFunc http.HandlerFunc,
) *Route[any, any]

func RegisterTaskHandler

func RegisterTaskHandler[I any, O any](
	router *Router, method, pattern string, taskHandler *TaskHandler[I, O],
) *Route[I, O]

TaskHandlers are used for JSON responses only, and they are intended to be particularly convenient for sending JSON. If you need to send a different content type, use a traditional http.Handler instead.

func (*Route[I, O]) Method

func (route *Route[I, O]) Method() string

func (*Route[I, O]) OriginalPattern

func (route *Route[I, O]) OriginalPattern() string

type Router

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

func NewRouter

func NewRouter(options ...*Options) *Router

func (*Router) AllRoutes

func (rt *Router) AllRoutes() []AnyRoute

func (*Router) GetDynamicParamPrefixRune

func (rt *Router) GetDynamicParamPrefixRune() rune

func (*Router) GetExplicitIndexSegment

func (rt *Router) GetExplicitIndexSegment() string

func (*Router) GetSplatSegmentRune

func (rt *Router) GetSplatSegmentRune() rune

func (*Router) MountRoot

func (rt *Router) MountRoot(optionalPatternToAppend ...string) string

Takes zero or one pattern strings. If no arguments are provided, returns the mount root, otherwise returns the mount root joined with the provided pattern. Discards any extra arguments. For example, if mux.MountRoot() were to return "/api/", then mux.MountRoot("foo") would return "/api/foo", and mux.MountRoot("foo", "bar") would still just return "/api/foo".

func (*Router) ServeHTTP

func (rt *Router) ServeHTTP(w http.ResponseWriter, r *http.Request)

type TaskHandler

type TaskHandler[I any, O any] = tasks.Task[*ReqData[I], O]

func TaskHandlerFromFunc

func TaskHandlerFromFunc[I any, O any](taskHandlerFunc TaskHandlerFunc[I, O]) *TaskHandler[I, O]

TaskHandlers are used for JSON responses only, and they are intended to be particularly convenient for sending JSON. If you need to send a different content type, use a traditional http.Handler instead.

type TaskHandlerFunc

type TaskHandlerFunc[I any, O any] = genericsutil.IOFunc[*ReqData[I], O]

type TaskMiddleware

type TaskMiddleware[O any] = tasks.Task[*ReqData[None], O]

func TaskMiddlewareFromFunc

func TaskMiddlewareFromFunc[O any](userFunc TaskMiddlewareFunc[O]) *TaskMiddleware[O]

type TaskMiddlewareFunc

type TaskMiddlewareFunc[O any] = genericsutil.IOFunc[*ReqData[None], O]

type TasksCtxRequirer

type TasksCtxRequirer interface {
	http.Handler
	NeedsTasksCtx()
}

type TasksCtxRequirerFunc

type TasksCtxRequirerFunc func(http.ResponseWriter, *http.Request)

func (TasksCtxRequirerFunc) NeedsTasksCtx

func (h TasksCtxRequirerFunc) NeedsTasksCtx()

func (TasksCtxRequirerFunc) ServeHTTP

Jump to

Keyboard shortcuts

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