packages feed

rest-snap 0.2.0.1 → 0.3.0.0

raw patch · 3 files changed

+27/−15 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Rest.Driver.Snap: instance Rest.Driver.Perform.Rest Snap.Internal.Types.Snap
+ Rest.Driver.Snap: instance GHC.Base.Applicative m => GHC.Base.Applicative (Rest.Driver.Snap.Snapped m)
+ Rest.Driver.Snap: instance GHC.Base.Functor m => GHC.Base.Functor (Rest.Driver.Snap.Snapped m)
+ Rest.Driver.Snap: instance GHC.Base.Monad m => GHC.Base.Monad (Rest.Driver.Snap.Snapped m)
+ Rest.Driver.Snap: instance Snap.Internal.Core.MonadSnap m => Rest.Driver.Perform.Rest (Rest.Driver.Snap.Snapped m)
- Rest.Driver.Snap: apiToHandler :: Api Snap -> Snap ()
+ Rest.Driver.Snap: apiToHandler :: (MonadSnap m, Rest m, Applicative m, Monad m) => Api m -> m ()
- Rest.Driver.Snap: apiToHandler' :: (Applicative m, Monad m) => Run m Snap -> Api m -> Snap ()
+ Rest.Driver.Snap: apiToHandler' :: (Applicative m, Monad m, MonadSnap n) => Run m n -> Api m -> n ()

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog +## 0.3.0.0++*  Generalize Snap to MonadSnap, thanks to theNerd247!+ #### 0.2.0.1  * Allow rest-core-0.39.
rest-snap.cabal view
@@ -1,5 +1,5 @@ name:                rest-snap-version:             0.2.0.1+version:             0.3.0.0 description:         Rest driver for Snap. synopsis:            Rest driver for Snap. maintainer:          code@silk.co@@ -28,7 +28,7 @@     , case-insensitive >= 0.4 && < 1.3     , rest-core >= 0.34 && < 0.40     , safe >= 0.2 && < 0.4-    , snap-core == 0.9.*+    , snap-core >= 0.9 && < 1.1     , unordered-containers == 0.2.*     , uri-encode == 1.5.*     , utf8-string >= 0.3 && < 1.1
src/Rest/Driver/Snap.hs view
@@ -1,8 +1,13 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE-    NoImplicitPrelude+    CPP+  , GeneralizedNewtypeDeriving+  , NoImplicitPrelude   , RankNTypes   #-}+#if MIN_VERSION_base(4,9,0)+{-# OPTIONS_GHC -Wno-redundant-constraints #-}+#endif module Rest.Driver.Snap   ( apiToHandler   , apiToHandler'@@ -28,21 +33,24 @@ import qualified Rest.Driver.Types as Rest import qualified Rest.Run          as Rest -apiToHandler :: Api Snap -> Snap ()+newtype Snapped m a = Snapped { unSnapped :: m a }+  deriving (Applicative, Functor, Monad)++apiToHandler :: (MonadSnap m, Rest m, Applicative m, Monad m) => Api m -> m () apiToHandler = apiToHandler' id -apiToHandler' :: (Applicative m, Monad m) => Run m Snap -> Api m -> Snap ()-apiToHandler' run api = Rest.apiToHandler' run api >>= writeLBS+apiToHandler' :: (Applicative m, Monad m, MonadSnap n) => Run m n -> Api m -> n ()+apiToHandler' run api = writeLBS =<< unSnapped (Rest.apiToHandler' (Snapped . run) api) -instance Rest Snap where-  getHeader nm       = getsRequest (fmap UTF8.toString . Snap.getHeader (CI.mk . UTF8.fromString $ nm))-  getParameter  nm   = getsRequest (fmap UTF8.toString . (>>= headMay) . rqParam (UTF8.fromString nm))-  getBody            = readRequestBody (1 * 1024 * 1024)-  getMethod          = getsRequest (toRestMethod . rqMethod)-  getPaths           = getsRequest (map (UTF8.toString . URI.decodeByteString) . filter (not . Char8.null) . Char8.split '/' . rqPathInfo)-  lookupMimeType     = return . fmap UTF8.toString . flip M.lookup defaultMimeTypes-  setHeader nm v     = modifyResponse (Snap.setHeader (CI.mk . UTF8.fromString $ nm) (UTF8.fromString v))-  setResponseCode cd = modifyResponse (Snap.setResponseCode cd)+instance (MonadSnap m) => Rest (Snapped m) where+  getHeader nm       = Snapped $ getsRequest (fmap UTF8.toString . Snap.getHeader (CI.mk . UTF8.fromString $ nm))+  getParameter  nm   = Snapped $ getsRequest (fmap UTF8.toString . (>>= headMay) . rqParam (UTF8.fromString nm))+  getBody            = Snapped $ readRequestBody (1 * 1024 * 1024)+  getMethod          = Snapped $ getsRequest (toRestMethod . rqMethod)+  getPaths           = Snapped $ getsRequest (map (UTF8.toString . URI.decodeByteString) . filter (not . Char8.null) . Char8.split '/' . rqPathInfo)+  lookupMimeType     = Snapped . return . fmap UTF8.toString . flip M.lookup defaultMimeTypes+  setHeader nm v     = Snapped $ modifyResponse (Snap.setHeader (CI.mk . UTF8.fromString $ nm) (UTF8.fromString v))+  setResponseCode cd = Snapped $ modifyResponse (Snap.setResponseCode cd)  toRestMethod :: Snap.Method -> Maybe Rest.Method toRestMethod Snap.GET    = Just Rest.GET