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 +4/−0
- rest-snap.cabal +2/−2
- src/Rest/Driver/Snap.hs +21/−13
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