wai-middleware-verbs-0.4.0.1: Route Wai middlewares based on HTTP verbs

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) => (ByteString -> r) -> VerbListenerT r m () Source #

For simple POST responses

put :: (Monad m, Monoid r) => (ByteString -> 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 (Either r (ByteString -> r)) Source #

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

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

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

Methods

liftBase :: b α -> VerbListenerT r m α #

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

Associated Types

type StM (VerbListenerT r m :: * -> *) a :: * #

Methods

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

restoreM :: StM (VerbListenerT r m) 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 #

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 #

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 #

MonadBaseControl b m stM => MonadBaseControl b (VerbListenerT r m) (Compose * * stM ((,) (VerbMap r))) Source # 

Methods

liftBaseWith :: (RunInBase (VerbListenerT r m) b (Compose * * stM ((,) (VerbMap r))) -> b a) -> VerbListenerT r m a #

restoreM :: Compose * * stM ((,) (VerbMap r)) a -> VerbListenerT r m a #

MonadTrans (VerbListenerT r) Source # 

Methods

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

MonadTransControl (VerbListenerT r) Source # 

Associated Types

type StT (VerbListenerT r :: (* -> *) -> * -> *) a :: * #

Methods

liftWith :: Monad m => (Run (VerbListenerT r) -> m a) -> VerbListenerT r m a #

restoreT :: Monad m => m (StT (VerbListenerT r) a) -> VerbListenerT r m a #

MonadTransControl (VerbListenerT r) ((,) (VerbMap r)) Source # 

Methods

liftWith :: Monad m => (Run (VerbListenerT r) ((,) (VerbMap r)) -> m a) -> VerbListenerT r m a #

restoreT :: Monad m => m (VerbMap r, 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 #

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

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

(<*) :: VerbListenerT r m a -> VerbListenerT r m b -> 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 #

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

Methods

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

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

Methods

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

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

Methods

catch :: Exception e => VerbListenerT r m a -> (e -> VerbListenerT r m a) -> 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 #

generalBracket :: VerbListenerT r m a -> (a -> ExitCase b -> VerbListenerT r m c) -> (a -> VerbListenerT r m b) -> VerbListenerT r m (b, c) #

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

Methods

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

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

Methods

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

type StT (VerbListenerT r) a Source # 
type StT (VerbListenerT r) a = StT (StateT (VerbMap r)) a
type StM (VerbListenerT r m) a Source # 
type StM (VerbListenerT r m) a = ComposeSt (VerbListenerT r) m a

Utilities

getVerbFromRequest :: Request -> Verb Source #

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

Orphan instances

Generic StdMethod Source # 

Associated Types

type Rep StdMethod :: * -> * #

Hashable Verb Source # 

Methods

hashWithSalt :: Int -> Verb -> Int #

hash :: Verb -> Int #