pkg: zntr.io/pkg/reactor/chain Index | Files

package chain

import "zntr.io/pkg/reactor/chain"

Index

Package Files

chain.go

type Chain Uses

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

Chain acts as a list of reactor.Handler constructors. Chain is effectively immutable: once created, it will always hold the same set of constructors in the same order.

func New Uses

func New(constructors ...Constructor) Chain

New creates a new chain, memorizing the given list of middleware constructors. New serves no other function, constructors are only called upon a call to Then().

func (Chain) Append Uses

func (c Chain) Append(constructors ...Constructor) Chain

Append extends a chain, adding the specified constructors as the last ones in the request flow.

Append returns a new chain, leaving the original one untouched.

stdChain := alice.New(m1, m2)
extChain := stdChain.Append(m3, m4)
// requests in stdChain go m1 -> m2
// requests in extChain go m1 -> m2 -> m3 -> m4

func (Chain) Then Uses

func (c Chain) Then(h reactor.Handler) reactor.Handler

Then chains the middleware and returns the final reactor.Handler.

New(m1, m2, m3).Then(h)

is equivalent to:

m1(m2(m3(h)))

When the request comes in, it will be passed to m1, then m2, then m3 and finally, the given handler (assuming every middleware calls the following one).

A chain can be safely reused by calling Then() several times.

stdStack := chain.New(ratelimitHandler, csrfHandler)
indexPipe = stdStack.Then(indexHandler)
authPipe = stdStack.Then(authHandler)

Note that constructors are called on every call to Then() and thus several instances of the same middleware will be created when a chain is reused in this way. For proper middleware, this should cause no problems.

func (Chain) ThenFunc Uses

func (c Chain) ThenFunc(fn reactor.HandlerFunc) reactor.Handler

ThenFunc works identically to Then, but takes a HandlerFunc instead of a Handler.

The following two statements are equivalent:

c.Then(reactor.HandlerFunc(fn))
c.ThenFunc(fn)

ThenFunc provides all the guarantees of Then.

type Constructor Uses

type Constructor func(reactor.Handler) reactor.Handler

Constructor for middleware builder

Package chain imports 1 packages (graph). Updated 2020-06-26. Refresh now. Tools for package owners.