wai-middleware-verbs 0.1.1 → 0.2.0
raw patch · 3 files changed
+22/−26 lines, 3 filesdep ~wai-transformersPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: wai-transformers
API changes (from Hackage documentation)
- Network.Wai.Middleware.Verbs: verbsToMiddleware :: MonadIO m => VerbListenerT (MiddlewareT m) m () -> MiddlewareT m
Files
- examples/Example.hs +16/−7
- src/Network/Wai/Middleware/Verbs.hs +4/−16
- wai-middleware-verbs.cabal +2/−3
examples/Example.hs view
@@ -16,8 +16,9 @@ import Control.Monad.Catch -theEmbeddedApp :: MonadIO m => LT.Text -> MiddlewareT m-theEmbeddedApp v _ _ respond =+theEmbeddedApp :: ( MonadIO m+ ) => LT.Text -> ApplicationT m+theEmbeddedApp v _ respond = respond $ textOnly $ v <> " Verb accepted!" @@ -28,7 +29,7 @@ myListener :: ( MonadIO m , MonadThrow m- ) => VerbListenerT (MiddlewareT m) m ()+ ) => VerbListenerT (ApplicationT m) m () myListener = do get $ theEmbeddedApp "GET" put uploadFail $ theEmbeddedApp "PUT" -- should never work@@ -38,8 +39,9 @@ uploadFail _ = throwM UploadFailed uploadSucceed _ = return () -handleError :: UploadError -> MiddlewareT m-handleError UploadFailed _ _ respond =+handleError :: ( MonadIO m+ ) => UploadError -> ApplicationT m+handleError UploadFailed _ respond = respond $ textOnly "Upload Failed!" @@ -47,8 +49,15 @@ , MonadCatch m ) => MiddlewareT m myApp app req respond =- (verbsToMiddleware myListener app req respond)- `catch` (\e -> handleError e app req respond)+ findResponse `catch` (\e -> handleError e req respond)+ where+ findResponse = do+ let v = getVerb req+ xs <- execVerbListenerT myListener+ mr <- lookupVerb req v xs+ case mr of+ Nothing -> app req respond+ Just r -> r req respond main :: IO ()
src/Network/Wai/Middleware/Verbs.hs view
@@ -44,18 +44,17 @@ , -- * Types VerbMap , Verb- , getVerb , -- ** Monad Transformer VerbListenerT (..) , execVerbListenerT- , verbsToMiddleware , -- * Utilities lookupVerb+ , getVerb , mapVerbs ) where -import Network.Wai.Trans+import Network.Wai (Request (..)) import Network.HTTP.Types import Data.HashMap.Lazy (HashMap)@@ -115,6 +114,7 @@ {-# INLINEABLE lookupVerb #-} + -- * Verb Writer -- | This is the monad for our DSL - where @r@ is the result type. We leave this@@ -143,22 +143,10 @@ {-# INLINEABLE execVerbListenerT #-} + instance MonadTrans (VerbListenerT r) where lift = VerbListenerT . lift -- uses StateT ---- | Turn a map from HTTP verbs to middleware, into a middleware.-verbsToMiddleware :: MonadIO m =>- VerbListenerT (MiddlewareT m) m ()- -> MiddlewareT m-verbsToMiddleware vl app req respond = do- let v = getVerb req- vmap <- execVerbListenerT vl- mMiddleware <- lookupVerb req v vmap- fromMaybe (app req respond) $- (\mid -> mid app req respond) <$> mMiddleware--{-# INLINEABLE verbsToMiddleware #-} -- * Combinators
wai-middleware-verbs.cabal view
@@ -1,5 +1,5 @@ Name: wai-middleware-verbs-Version: 0.1.1+Version: 0.2.0 Author: Athan Clark <athan.clark@gmail.com> Maintainer: Athan Clark <athan.clark@gmail.com> License: BSD3@@ -32,7 +32,6 @@ , transformers-base , unordered-containers , wai- , wai-transformers >= 0.0.3 Executable example if flag(Example)@@ -59,7 +58,7 @@ , transformers-base , unordered-containers , wai- , wai-transformers >= 0.0.3+ , wai-transformers >= 0.0.4 , wai-middleware-content-type , warp