muxchain

package module
v0.0.0-...-8216302 Latest Latest
Warning

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

Go to latest
Published: Feb 21, 2019 License: BSD-3-Clause Imports: 1 Imported by: 0

README

MuxChain

MuxChain is a small package designed to complement net/http for specifying chains of handlers. With it, you can succinctly compose layers of middleware without introducing large dependencies or effectively defeating the type system.

Example
muxchain.Chain("/", logger, gzipHandler, echoHandler)
http.ListenAndServe(":8080", muxchain.Default)

This specifies that all patterns matched should be handled by the logger, then gzip, then echo. Since we're chaining to the default MuxChain, we can just pass that to http.ListenAndServe. You can see a more complete example in the "sample" directory.

License

BSD 3-clause (see LICENSE file)

Documentation

Index

Constants

This section is empty.

Variables

View Source
var Default = &MuxChain{}

Functions

func Chain

func Chain(pattern string, handlers ...http.Handler)

Chain registers the pattern and http.Handler chain to the DefaultMuxChain.

func ChainHandlers

func ChainHandlers(handlers ...http.Handler) http.Handler

ChainHandlers chains together a set of handlers under an empty path.

func HandleChain

func HandleChain(w http.ResponseWriter, req *http.Request, handlers ...http.Handler)

HandleChain is the utility function chained handlers are responsible for calling when they are complete.

Types

type ChainedHandler

type ChainedHandler interface {
	http.Handler

	// ServeHTTPChain allows the handler to do its work and then call the remaining
	// handler chain. Implementers should call muxchain.HandleChain when complete.
	ServeHTTPChain(w http.ResponseWriter, req *http.Request, h ...http.Handler)
}

ChainedHander allows implementers to call the handlers after them in a muxchain on their own. This allows handlers to defer functions until after the handler chain following them has been completed.

type ChainedHandlerFunc

type ChainedHandlerFunc func(w http.ResponseWriter, req *http.Request, handlers ...http.Handler)

ChainedHandlerFunc represents a handler that is able to be chained to subsequent handlers.

func (ChainedHandlerFunc) ServeHTTP

func (c ChainedHandlerFunc) ServeHTTP(w http.ResponseWriter, req *http.Request)

ServeHTTP allows ChainedHandlerFuncs to implement http.Handler

func (ChainedHandlerFunc) ServeHTTPChain

func (c ChainedHandlerFunc) ServeHTTPChain(w http.ResponseWriter, req *http.Request, handlers ...http.Handler)

ServeHTTPChain allows ChainedHandlerFuncs to be identified

type CheckedResponseWriter

type CheckedResponseWriter interface {
	http.ResponseWriter
	Written() bool
}

CheckedResponseWriter augments http.ResponseWriter to indicate if the response has been written to.

type MuxChain

type MuxChain struct {
	Muxer
}

func (*MuxChain) Chain

func (m *MuxChain) Chain(pattern string, handlers ...http.Handler)

Chain registers a pattern to a sequence of http.Handlers. Upon receiving a request, the mux chain will find the best matching pattern and call that chain of handlers. The handlers will be called in turn until one of them writes a response or the end of the chain is reached. If one of the handlers is a Muxer (e.g. http.ServeMux), the MuxChain will skip it if no pattern matches.

func (*MuxChain) ServeHTTPChain

func (m *MuxChain) ServeHTTPChain(w http.ResponseWriter, req *http.Request, handlers ...http.Handler)

type Muxer

type Muxer interface {
	http.Handler
	Handle(pattern string, handler http.Handler)
	Handler(r *http.Request) (h http.Handler, pattern string)
	HandleFunc(pattern string, handler func(http.ResponseWriter, *http.Request))
}

Muxer identifies types that act as a ServeMux.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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