firefly 0.1.1.0 → 0.2.0.0
raw patch · 5 files changed
+20/−5 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
+ Web.Firefly: respondWith :: ToResponse r => Handler r -> App ()
+ Web.Firefly: runHandler :: Handler r -> App r
+ Web.Firefly: type HeaderMap = Map (CI Text) [Text]
+ Web.Firefly.Response: respondWith :: ToResponse r => Handler r -> App ()
+ Web.Firefly.Types: runHandler :: Handler r -> App r
- Web.Firefly: route :: (ToResponse r) => Pattern -> Handler r -> App ()
+ Web.Firefly: route :: ToResponse r => Pattern -> Handler r -> App ()
- Web.Firefly: type Handler a = App a
+ Web.Firefly: type Handler a = ReaderT ReqContext IO a
- Web.Firefly.Handler: route :: (ToResponse r) => Pattern -> Handler r -> App ()
+ Web.Firefly.Handler: route :: ToResponse r => Pattern -> Handler r -> App ()
- Web.Firefly.Types: type Handler a = App a
+ Web.Firefly.Types: type Handler a = ReaderT ReqContext IO a
Files
- firefly.cabal +1/−1
- src/Web/Firefly.hs +3/−0
- src/Web/Firefly/Handler.hs +2/−2
- src/Web/Firefly/Response.hs +7/−0
- src/Web/Firefly/Types.hs +7/−2
firefly.cabal view
@@ -1,5 +1,5 @@ name: firefly-version: 0.1.1.0+version: 0.2.0.0 synopsis: A simple HTTP server framework -- description: homepage: https://github.com/ChrisPenner/firefly#readme
src/Web/Firefly.hs view
@@ -9,9 +9,11 @@ -- * Types , App , Handler+ , HeaderMap -- * Handlers , route+ , runHandler -- * Requests , getPath@@ -34,6 +36,7 @@ -- * Responses , ToResponse(..) , respond+ , respondWith -- ** Wrapper Types , Json(..)
src/Web/Firefly/Handler.hs view
@@ -28,7 +28,7 @@ -- > route "/" indexHandler -- > route "/hello.*" helloHandler -- > route "/helloHarry" helloHarryHandler-route :: (ToResponse r) => Pattern -> Handler r -> App ()+route :: ToResponse r => Pattern -> Handler r -> App () route routePath handler = do doesPathMatch <- pathMatches routePath- when doesPathMatch (handler >>= respond . toResponse)+ when doesPathMatch $ respondWith handler
src/Web/Firefly/Response.hs view
@@ -1,10 +1,12 @@ {-# language FlexibleInstances #-} {-# language OverloadedStrings #-} {-# language UndecidableInstances #-}+{-# language RankNTypes #-} module Web.Firefly.Response ( ToResponse(..) , Json(..) , respond+ , respondWith ) where import Data.Function ((&))@@ -69,3 +71,8 @@ -- in the App or Handler Monads will not be run. respond :: ToResponse r => r -> App () respond = throwError . toResponse++-- | Use a given handler to respond to the request. +-- Any handlers following this will not run.+respondWith :: ToResponse r => Handler r -> App ()+respondWith handler = runHandler handler >>= respond
src/Web/Firefly/Types.hs view
@@ -1,8 +1,9 @@+{-# language NamedFieldPuns #-} module Web.Firefly.Types where import Control.Monad.Reader import Control.Monad.Except-import Network.Wai as W+import qualified Network.Wai as W import qualified Data.Text as T import qualified Data.Map as M import qualified Data.CaseInsensitive as CI@@ -13,7 +14,11 @@ -- | Handler is an alias for 'App', currently provided for semantic reasons, -- but the two may diverge in the future.-type Handler a = App a+type Handler a = ReaderT ReqContext IO a++-- | Runs a handler within an App WITHOUT rendering the response+runHandler :: Handler r -> App r+runHandler handler = ask >>= liftIO . runReaderT handler -- | A regex pattern for route matching. type Pattern = T.Text