packages feed

growler 0.4.0 → 0.5.0

raw patch · 3 files changed

+42/−15 lines, 3 filesdep ~aesondep ~case-insensitivedep ~monad-controlPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: aeson, case-insensitive, monad-control, pipes, pipes-aeson, pipes-wai, transformers-base, vector, warp

API changes (from Hackage documentation)

+ Web.Growler.EventSource: eventSource :: MonadIO m => IO ServerEvent -> HandlerT m ()
+ Web.Growler.Types: StHandlerT :: Either ResponseState (a, ResponseState) -> StHandlerT a
+ Web.Growler.Types: newtype StHandlerT a
+ Web.Growler.Types: unStHandlerT :: StHandlerT a -> Either ResponseState (a, ResponseState)

Files

growler.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                growler-version:             0.4.0+version:             0.5.0 synopsis:            A revised version of the scotty library that attempts to be simpler and more performant. description:         Growler provides a very similar interface to scotty, with slight tweaks for performance and a few feature tradeoffs. Growler provides the ability to abort actions (handlers) with arbitrary responses, not just in the event of redirects or raising errors. Growler avoids coercing everything into lazy Text values and reading the whole request body into memory. It also eliminates the ability to abort the handler and have another handler handle the request instead (Scotty's 'next' function). 		     .@@ -33,7 +33,13 @@ cabal-version:       >=1.10  library-  exposed-modules:   Web.Growler, Web.Growler.Handler, Web.Growler.Parsable, Web.Growler.Router, Web.Growler.Types+  exposed-modules:     Web.Growler,+                       Web.Growler.Handler,+                       Web.Growler.Parsable,+                       Web.Growler.Router,+                       Web.Growler.Types,+                       Web.Growler.EventSource+   other-extensions:    OverloadedStrings, FlexibleContexts, FlexibleInstances, LambdaCase, RankNTypes, ScopedTypeVariables   build-depends:       base >=4.6 && <5,                        lens >=4.5 && <5,@@ -46,15 +52,15 @@                        regex-compat >=0.95 && <1,                        blaze-builder >=0.3 && <0.7,                        unordered-containers >=0.2 && <0.9,-                       aeson,-                       vector,-                       case-insensitive,-                       warp,-                       pipes,-                       pipes-aeson,-                       pipes-wai,-                       monad-control,+                       aeson >= 0.8,+                       vector >= 0.7.1,+                       case-insensitive >= 1.2,+                       warp >= 3,+                       pipes >= 4.0 && <4.2,+                       pipes-aeson >= 0.4,+                       pipes-wai >= 3,+                       monad-control == 1.*,                        either >= 4.3.1,-                       transformers-base+                       transformers-base >= 0.4   hs-source-dirs:      src   default-language:    Haskell2010
+ src/Web/Growler/EventSource.hs view
@@ -0,0 +1,19 @@+{-# LANGUAGE OverloadedStrings #-}+module Web.Growler.EventSource where+import           Blaze.ByteString.Builder (Builder)+import           Control.Monad.Trans+import           Data.Function (fix)+import           Network.HTTP.Types (hContentType, status200)+import           Network.Wai.EventSource.EventStream+import           Web.Growler++eventSource :: MonadIO m => IO ServerEvent -> HandlerT m ()+eventSource m = do+  status status200+  setHeader hContentType "text/event-stream"+  stream $ \sendChunk flush -> fix $ \loop -> do+    se <- m+    case eventToBuilder se of+      Nothing -> return ()+      Just b -> sendChunk b >> flush >> loop+
src/Web/Growler/Types.hs view
@@ -127,8 +127,10 @@ instance MonadBase b m => MonadBase b (HandlerT m) where   liftBase = liftBaseDefault +newtype StHandlerT a = StHandlerT { unStHandlerT :: Either ResponseState (a, ResponseState) }+ instance MonadTransControl HandlerT where-  newtype StT HandlerT a = StHandlerT { unStHandlerT :: Either ResponseState (a, ResponseState) }+  type StT HandlerT a = StHandlerT a   liftWith f = do     r <- HandlerT ask     s <- HandlerT get@@ -149,9 +151,9 @@         return x  instance MonadBaseControl b m => MonadBaseControl b (HandlerT m) where-  newtype StM (HandlerT m) a = StMHandlerT { unStMHandlerT :: StM m (StT HandlerT a) }-  liftBaseWith = defaultLiftBaseWith StMHandlerT-  restoreM = defaultRestoreM unStMHandlerT+  type StM (HandlerT m) a = ComposeSt HandlerT m a+  liftBaseWith = defaultLiftBaseWith+  restoreM = defaultRestoreM  type Handler = HandlerT IO