wai-middleware-verbs-0.0.4: Route different middleware responses based on the incoming HTTP verb.

Copyright(c) Athan Clark, 2015
LicenseBSD-3
Maintainerathan.clark@gmail.com
Stabilityexperimental
PortabilityPOSIX
Safe HaskellNone
LanguageHaskell2010

Network.Wai.Middleware.Verbs

Contents

Description

This module provides everything you need to route based off different HTTP verbs. The Combinators section defines the get, post and other functions you would expect in a toolset like this. Likewise, we also include tools for manually looking into the VerbListenerT object constructed from the combinators, and turning it directly into a WAI MiddlewareT.

Synopsis

Combinators

get :: Monad m => r -> VerbListenerT r e u m () Source

For simple GET responses

getReq :: Monad m => (Request -> r) -> VerbListenerT r e u m () Source

Inspect the Request object supplied by WAI

post :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m () Source

For simple POST responses

postReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m () Source

Inspect the Request object supplied by WAI

put :: (Monad m, MonadIO m) => HandleUpload e m u -> (Either (Maybe e) u -> r) -> VerbListenerT r e u m () Source

For simple PUT responses

putReq :: (Monad m, MonadIO m) => HandleUpload e m u -> RespondUpload e u r -> VerbListenerT r e u m () Source

Inspect the Request object supplied by WAI

delete :: Monad m => r -> VerbListenerT r e u m () Source

For simple DELETE responses

deleteReq :: Monad m => (Request -> r) -> VerbListenerT r e u m () Source

Inspect the Request object supplied by WAI

Types

newtype Verbs e u m r Source

A map from an HTTP verb, to a responding and uploading mechanism.

Constructors

Verbs 

Fields

unVerbs :: Map Verb (ResponseSpec e u m r)
 

Instances

Functor (Verbs e u m) Source 
Monoid (Verbs e u m r) Source 
Monad m => MonadState (Verbs e u m r) (VerbListenerT r e u m) Source 

type Verb = StdMethod Source

getVerb :: Request -> Verb Source

Fetches the HTTP verb from the WAI Request - defaults to GET.

type ResponseSpec e u m r = (HandleUpload e m u, RespondUpload e u r) Source

type HandleUpload e m u = Request -> ExceptT (Maybe e) m u Source

Given a request, either throw a possibly existent error, or create some upload result.

type RespondUpload e u r = Request -> Either (Maybe e) u -> r Source

Given a request and the potential result of handling an upload, return a response (usually Middleware).

supplyReq :: Request -> Map Verb (ResponseSpec e u m r) -> Map Verb (ExceptT (Maybe e) m u, Either (Maybe e) u -> r) Source

flip ($) for supplying a Request into the two ResponseSpec functions.

Monad Transformer

newtype VerbListenerT r e u m a Source

The type variables are r for the result, e for the error type throwable during uploading, u is the sucessful upload type, and m and a form the last two parts of the monad transformer.

Constructors

VerbListenerT 

Fields

runVerbListenerT :: StateT (Verbs e u m r) m a
 

Instances

MonadTrans (VerbListenerT r e u) Source 
Monad m => Monad (VerbListenerT r e u m) Source 
Functor m => Functor (VerbListenerT r e u m) Source 
Monad m => Applicative (VerbListenerT r e u m) Source 
MonadIO m => MonadIO (VerbListenerT r e u m) Source 
Monad m => MonadState (Verbs e u m r) (VerbListenerT r e u m) Source 

execVerbListenerT :: Monad m => VerbListenerT r e u m a -> m (Verbs e u m r) Source

verbsToMiddleware :: MonadIO m => VerbListenerT (MiddlewareT m) e u m () -> MiddlewareT m Source

Turn a map from HTTP verbs to middleware, into a middleware.

mapVerbs :: Monad m => (a -> b) -> VerbListenerT a e u m () -> VerbListenerT b e u m () Source

Utilities

lookupVerb :: Verb -> Request -> Verbs e u m r -> Maybe (ExceptT (Maybe e) m u, Either (Maybe e) u -> r) Source

Take a verb map and a request, and return the lookup after providing the request (for upload cases).

lookupVerbM :: Monad m => Verb -> Request -> Verbs e u m r -> m (Maybe r) Source

Take the monadic partial result of lookupVerb, and actually handle the upload.