wai-middleware-verbs-0.3.2: 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 respond depending on an HTTP verbs. The Combinators section defines the get, post and other functions you would expect in a toolset like this. The VerbListenerT object is constructed from the combinators, and turning it directly into a WAI MiddlewareT is easy with verbsToMiddleware.

myApp :: MonadIO => MiddlewareT m
myApp = verbsToMiddleware $ do
  get myMiddleware1
  put uploader myMiddleware2
  post uploader myMiddleware3
  delete myMiddleware4
  where
    uploader :: MonadIO m => Request -> m ()
    uploader req = liftIO $ print =<< getStrictRequestBody req

Synopsis

Combinators

get :: (Monad m, Monoid r) => r -> VerbListenerT r m () Source #

For simple GET responses

post :: (Monad m, Monoid r) => r -> VerbListenerT r m () Source #

For simple POST responses

put :: (Monad m, Monoid r) => r -> VerbListenerT r m () Source #

For simple PUT responses

delete :: (Monad m, Monoid r) => r -> VerbListenerT r m () Source #

For simple DELETE responses

Types

type VerbMap r = HashMap Verb r Source #

A map from an HTTP verb, to a result and uploading method.

type Verb = StdMethod Source #

Monad Transformer

newtype VerbListenerT r m a Source #

This is the monad for our DSL - where r is the result type. We leave this polymorphic for ActionT for nested-routes.

myListener :: MonadIO m => VerbListenerT (MiddlewareT m) m ()
myListener = do
  get myMiddleware1
  post uploader myMiddleware2
  where
    uploader :: MonadIO Request -> m ()
    uploader req =
      liftIO $ print =<< strictRequestBody req

Constructors

VerbListenerT 

Fields

Instances

MonadReader r m => MonadReader r (VerbListenerT r m) Source # 

Methods

ask :: VerbListenerT r m r

local :: (r -> r) -> VerbListenerT r m a -> VerbListenerT r m a

reader :: (r -> a) -> VerbListenerT r m a

MonadWriter w m => MonadWriter w (VerbListenerT r m) Source # 

Methods

writer :: (a, w) -> VerbListenerT r m a

tell :: w -> VerbListenerT r m ()

listen :: VerbListenerT r m a -> VerbListenerT r m (a, w)

pass :: VerbListenerT r m (a, w -> w) -> VerbListenerT r m a

MonadBase b m => MonadBase b (VerbListenerT r m) Source # 

Methods

liftBase :: b α -> VerbListenerT r m α

MonadError e' m => MonadError e' (VerbListenerT r m) Source # 

Methods

throwError :: e' -> VerbListenerT r m a

catchError :: VerbListenerT r m a -> (e' -> VerbListenerT r m a) -> VerbListenerT r m a

MonadTrans (VerbListenerT r) Source # 

Methods

lift :: Monad m => m a -> VerbListenerT r m a #

Monad m => MonadState (VerbMap r) (VerbListenerT r m) Source # 

Methods

get :: VerbListenerT r m (VerbMap r)

put :: VerbMap r -> VerbListenerT r m ()

state :: (VerbMap r -> (a, VerbMap r)) -> VerbListenerT r m a

Monad m => Monad (VerbListenerT r m) Source # 

Methods

(>>=) :: VerbListenerT r m a -> (a -> VerbListenerT r m b) -> VerbListenerT r m b #

(>>) :: VerbListenerT r m a -> VerbListenerT r m b -> VerbListenerT r m b #

return :: a -> VerbListenerT r m a #

fail :: String -> VerbListenerT r m a #

Functor m => Functor (VerbListenerT r m) Source # 

Methods

fmap :: (a -> b) -> VerbListenerT r m a -> VerbListenerT r m b #

(<$) :: a -> VerbListenerT r m b -> VerbListenerT r m a #

MonadFix m => MonadFix (VerbListenerT r m) Source # 

Methods

mfix :: (a -> VerbListenerT r m a) -> VerbListenerT r m a #

Monad m => Applicative (VerbListenerT r m) Source # 

Methods

pure :: a -> VerbListenerT r m a #

(<*>) :: VerbListenerT r m (a -> b) -> VerbListenerT r m a -> VerbListenerT r m b #

(*>) :: VerbListenerT r m a -> VerbListenerT r m b -> VerbListenerT r m b #

(<*) :: VerbListenerT r m a -> VerbListenerT r m b -> VerbListenerT r m a #

MonadIO m => MonadIO (VerbListenerT r m) Source # 

Methods

liftIO :: IO a -> VerbListenerT r m a #

MonadPlus m => Alternative (VerbListenerT r m) Source # 

Methods

empty :: VerbListenerT r m a #

(<|>) :: VerbListenerT r m a -> VerbListenerT r m a -> VerbListenerT r m a #

some :: VerbListenerT r m a -> VerbListenerT r m [a] #

many :: VerbListenerT r m a -> VerbListenerT r m [a] #

MonadPlus m => MonadPlus (VerbListenerT r m) Source # 

Methods

mzero :: VerbListenerT r m a #

mplus :: VerbListenerT r m a -> VerbListenerT r m a -> VerbListenerT r m a #

MonadCont m => MonadCont (VerbListenerT r m) Source # 

Methods

callCC :: ((a -> VerbListenerT r m b) -> VerbListenerT r m a) -> VerbListenerT r m a

MonadThrow m => MonadThrow (VerbListenerT r m) Source # 

Methods

throwM :: Exception e => e -> VerbListenerT r m a

MonadMask m => MonadMask (VerbListenerT r m) Source # 

Methods

mask :: ((forall a. VerbListenerT r m a -> VerbListenerT r m a) -> VerbListenerT r m b) -> VerbListenerT r m b

uninterruptibleMask :: ((forall a. VerbListenerT r m a -> VerbListenerT r m a) -> VerbListenerT r m b) -> VerbListenerT r m b

MonadCatch m => MonadCatch (VerbListenerT r m) Source # 

Methods

catch :: Exception e => VerbListenerT r m a -> (e -> VerbListenerT r m a) -> VerbListenerT r m a

(MonadResource m, MonadBase IO m) => MonadResource (VerbListenerT r m) Source # 

Methods

liftResourceT :: ResourceT IO a -> VerbListenerT r m a

MonadLogger m => MonadLogger (VerbListenerT r m) Source # 

Methods

monadLoggerLog :: ToLogStr msg => Loc -> LogSource -> LogLevel -> msg -> VerbListenerT r m ()

Utilities

lookupVerb :: Verb -> VerbMap r -> Maybe r Source #

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

getVerb :: Request -> Verb Source #

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

Orphan instances

Generic StdMethod Source # 

Associated Types

type Rep StdMethod :: * -> * #

Methods

from :: StdMethod -> Rep StdMethod x #

to :: Rep StdMethod x -> StdMethod #

Hashable Verb Source # 

Methods

hashWithSalt :: Int -> Verb -> Int

hash :: Verb -> Int