servant-server-0.16.2: A family of combinators for defining webservices APIs and serving them

Safe Haskell None Haskell2010

Servant.Server.Internal.Router

Synopsis

# Documentation

data Router' env a Source #

Internal representation of a router.

The first argument describes an environment type that is expected as extra input by the routers at the leaves. The environment is filled while running the router, with path components that can be used to process captures.

Constructors

 StaticRouter (Map Text (Router' env a)) [env -> a] the map contains routers for subpaths (first path component used for lookup and removed afterwards), the list contains handlers for the empty path, to be tried in order CaptureRouter (Router' (Text, env) a) first path component is passed to the child router in its environment and removed afterwards CaptureAllRouter (Router' ([Text], env) a) all path components are passed to the child router in its environment and are removed afterwards RawRouter (env -> a) to be used for routes we do not know anything about Choice (Router' env a) (Router' env a) left-biased choice between two routers
Instances
 Functor (Router' env) Source # Instance detailsDefined in Servant.Server.Internal.Router Methodsfmap :: (a -> b) -> Router' env a -> Router' env b #(<\$) :: a -> Router' env b -> Router' env a #

pathRouter :: Text -> Router' env a -> Router' env a Source #

Smart constructor for a single static path component.

leafRouter :: (env -> a) -> Router' env a Source #

Smart constructor for a leaf, i.e., a router that expects the empty path.

choice :: Router' env a -> Router' env a -> Router' env a Source #

Smart constructor for the choice between routers. We currently optimize the following cases:

• Two static routers can be joined by joining their maps and concatenating their leaf-lists.
• Two dynamic routers can be joined by joining their codomains.
• Choice nodes can be reordered.

Datatype used for representing and debugging the structure of a router. Abstracts from the handlers at the leaves.

Two Routers can be structurally compared by computing their RouterStructure using routerStructure and then testing for equality, see sameStructure.

Instances
 Source # Instance detailsDefined in Servant.Server.Internal.Router Methods Source # Instance detailsDefined in Servant.Server.Internal.Router MethodsshowList :: [RouterStructure] -> ShowS #

Compute the structure of a router.

Assumes that the request or text being passed in WithRequest or CaptureRouter does not affect the structure of the underlying tree.

sameStructure :: Router' env a -> Router' env b -> Bool Source #

Compare the structure of two routers.

routerLayout :: Router' env a -> Text Source #

Provide a textual representation of the structure of a router.

tweakResponse :: (RouteResult Response -> RouteResult Response) -> Router env -> Router env Source #

Apply a transformation to the response of a Router.

Interpret a router as an application.

runChoice :: [env -> RoutingApplication] -> env -> RoutingApplication Source #

Try a list of routing applications in order. We stop as soon as one fails fatally or succeeds. If all fail normally, we pick the "best" error.