rest-example 0.2.0.3 → 0.2.0.4
raw patch · 10 files changed
+96/−27 lines, 10 filesdep +base-compatdep +bytestringdep ~aesondep ~rest-coredep ~transformers
Dependencies added: base-compat, bytestring
Dependency ranges changed: aeson, rest-core, transformers, transformers-compat, warp
Files
- CHANGELOG.md +4/−0
- example-api/Api.hs +1/−1
- example-api/Api/Post.hs +6/−2
- example-api/Api/Test.hs +53/−8
- example-api/Api/Test/Err2.hs +1/−1
- example-api/Api/Test/ReservedName.hs +1/−1
- example-api/Api/User.hs +3/−1
- example-api/ApiTypes.hs +6/−2
- example-api/Example.hs +6/−2
- rest-example.cabal +15/−9
CHANGELOG.md view
@@ -1,5 +1,9 @@ # Changelog +#### 0.2.0.4++* Allow rest-core-0.39.+ #### 0.2.0.3 * Update lots of dependencies.
example-api/Api.hs view
@@ -13,7 +13,7 @@ -- | Defines a versioned api api :: Api BlogApi-api = [(mkVersion 1 0 0, Some1 blog)]+api = Versioned [(mkVersion 1 0 0, Some1 blog)] -- | The entire routing table for v1.0.0 of the blog blog :: Router BlogApi BlogApi
example-api/Api/Post.hs view
@@ -1,4 +1,7 @@-{-# LANGUAGE DeriveDataTypeable #-}+{-# LANGUAGE+ DeriveDataTypeable+ , NoImplicitPrelude+ #-} module Api.Post ( Identifier (..) , WithPost@@ -6,7 +9,8 @@ , postFromIdentifier ) where -import Control.Applicative+import Prelude.Compat+ import Control.Concurrent.STM (STM, TVar, atomically, modifyTVar, readTVar) import Control.Monad (unless) import Control.Monad.Error.Class
example-api/Api/Test.hs view
@@ -5,21 +5,31 @@ , OverloadedStrings , ScopedTypeVariables #-}-module Api.Test where+module Api.Test+ ( resource+ , WithText+ , Err (..)+ , Ok (..)+ ) where -import Control.Monad.Error.Class+import Control.Monad.Except import Control.Monad.Reader import Data.Aeson+import Data.ByteString.Lazy (ByteString) import Data.Data import Data.JSON.Schema+import Data.Maybe import Data.Text (Text) import GHC.Generics import Generics.Generic.Aeson import Generics.XmlPickler+import Safe import Text.XML.HXT.Arrow.Pickle import Rest-import qualified Rest.Resource as R+import Rest.Dictionary+import qualified Rest.Driver.Perform as Driver (accept)+import qualified Rest.Resource as R import ApiTypes import qualified Api.Test.Err2 as E2@@ -51,7 +61,10 @@ , ("differentFormats" , differentFormats ) , ("intersectedFormats" , intersectedFormats ) , ("intersectedFormats2", intersectedFormats2)- , ("errorImport" , errorImport )+ , ("rawXmlIO" , rawXmlIO )+ , ("rawJsonIO" , rawJsonIO )+ , ("rawJsonAndXmlI" , rawJsonAndXmlI_ )+ , ("rawJsonAndXmlO" , rawJsonAndXmlO_ ) , ("noError" , noError ) , ("justStringO" , justStringO ) , ("preferJson" , preferJson )@@ -85,11 +98,43 @@ "error" -> throwError $ domainReason Err _ -> return Ok -errorImport :: Handler WithText-errorImport = mkIdHandler (stringI . rawXmlO . xmlE) $ \s (_::Text) ->+rawXmlIO :: Handler WithText+rawXmlIO = mkIdHandler (rawXmlI . rawXmlO . xmlE) $ \s _ -> case s of- "error" -> throwError $ domainReason E2.Err- _ -> return "<ok/>"+ "<error/>" -> throwError $ domainReason E2.Err+ _ -> return "<ok/>"++rawJsonIO :: Handler WithText+rawJsonIO = mkIdHandler (rawJsonI . rawJsonO . jsonE) $ \s _ ->+ case s of+ "\"error\"" -> throwError $ domainReason E2.Err+ _ -> return "\"ok\""++rawJsonAndXmlI_ :: Handler WithText+rawJsonAndXmlI_ = mkInputHandler (stringO . rawJsonAndXmlI) handler+ where+ handler :: Either Json Xml -> ExceptT Reason_ WithText String+ handler = return . \case+ Left (Json _) -> "json input"+ Right (Xml _) -> "xml input"++rawJsonAndXmlO_ :: Handler WithText+rawJsonAndXmlO_ = mkHandler (addHeader contentType . mkHeader accept . mkPar typeParam . rawJsonAndXmlO) handler+ where+ handler :: Env (Maybe String, Maybe String) (Maybe String) () -> ExceptT Reason_ WithText ByteString+ handler (Env (mContentType, mAccept) mType ()) = do+ let accs = Driver.accept mAccept mContentType mType+ if JsonFormat `elem` accs+ then return "\"json\""+ else if XmlFormat `elem` accs+ then return "<xml/>"+ else throwError . OutputError $ UnsupportedFormat "Only json and xml accept headers are allowed"+ contentType :: Header (Maybe String)+ contentType = Header ["Content-Type"] (return . headMay . catMaybes)+ typeParam :: Param (Maybe String)+ typeParam = Param ["type"] (return . headMay . catMaybes)+ accept :: Header (Maybe String)+ accept = Header ["Accept"] (return . headMay . catMaybes) noError :: Handler WithText noError = mkConstHandler jsonO $ return Ok
example-api/Api/Test/Err2.hs view
@@ -2,7 +2,7 @@ DeriveDataTypeable , DeriveGeneric #-}-module Api.Test.Err2 where+module Api.Test.Err2 (Err (..)) where import Data.Aeson import Data.Data
example-api/Api/Test/ReservedName.hs view
@@ -7,7 +7,7 @@ , TemplateHaskell , TypeFamilies #-}-module Api.Test.ReservedName where+module Api.Test.ReservedName (resource) where import Control.Monad.Reader import Data.Text (Text)
example-api/Api/User.hs view
@@ -1,6 +1,8 @@+{-# LANGUAGE NoImplicitPrelude #-} module Api.User (resource) where -import Control.Applicative ((<$>))+import Prelude.Compat+ import Control.Concurrent.STM (atomically, modifyTVar, readTVar) import Control.Monad.Error.Class (throwError) import Control.Monad.Reader (ReaderT, asks)
example-api/ApiTypes.hs view
@@ -1,7 +1,11 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE+ GeneralizedNewtypeDeriving+ , NoImplicitPrelude+ #-} module ApiTypes where -import Control.Applicative (Applicative)+import Prelude.Compat+ import Control.Concurrent.STM (TVar) import Control.Monad.Reader (MonadReader, ReaderT (..)) import Control.Monad.Trans (MonadIO)
example-api/Example.hs view
@@ -1,7 +1,11 @@-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE+ NoImplicitPrelude+ , OverloadedStrings+ #-} module Example (exampleBlog) where -import Control.Applicative+import Prelude.Compat+ import Control.Concurrent.STM (newTVarIO) import Data.HashMap.Strict (HashMap) import Data.Set (Set)
rest-example.cabal view
@@ -1,5 +1,5 @@ name: rest-example-version: 0.2.0.3+version: 0.2.0.4 synopsis: Example project for rest homepage: http://www.github.com/silkapp/rest license: BSD3@@ -41,17 +41,19 @@ Type.UserSignupError build-depends: base >= 4.6 && < 4.9- , aeson >= 0.7 && < 0.11+ , aeson >= 0.7 && < 0.12+ , base-compat >= 0.8 && < 0.10+ , bytestring >= 0.9 && < 0.11 , containers >= 0.3 && < 0.6 , generic-aeson == 0.2.* , hxt == 9.3.* , json-schema >= 0.6 && < 0.8 , mtl >= 2.0 && < 2.3 , generic-xmlpickler >= 0.1.0.1 && < 0.2- , rest-core >= 0.36 && < 0.38+ , rest-core >= 0.39 && < 0.40 , safe >= 0.2 && < 0.4- , transformers >= 0.2 && < 0.5- , transformers-compat == 0.4.*+ , transformers >= 0.2 && < 0.6+ , transformers-compat >= 0.4 && < 0.6 , stm >= 2.1 && < 2.5 , text >= 0.11 && < 1.3 , time >= 1.1 && < 1.6@@ -89,11 +91,12 @@ buildable: True build-depends: base >= 4.6 && < 4.9+ , base-compat >= 0.8 && < 0.10 , happstack-server >= 7.1 && < 7.5 , mtl >= 2.0 && < 2.3 , rest-example , rest-happstack >= 0.2 && < 0.4- , transformers-compat == 0.4.*+ , transformers-compat >= 0.4 && < 0.6 else buildable: False @@ -106,9 +109,10 @@ buildable: True build-depends: base >= 4.6 && < 4.9+ , base-compat >= 0.8 && < 0.10 , rest-example , rest-wai >= 0.1 && < 0.3- , warp >= 2.1 && < 3.2+ , warp >= 2.1 && < 3.3 else buildable: False @@ -121,13 +125,14 @@ buildable: True build-depends: base >= 4.6 && < 4.9+ , base-compat >= 0.8 && < 0.10 , mtl >= 2.0 && < 2.3- , rest-core >= 0.36 && < 0.38+ , rest-core >= 0.39 && < 0.40 , rest-example , rest-snap >= 0.1 && < 0.3 , snap-core == 0.9.* , snap-server == 0.9.*- , transformers-compat == 0.4.*+ , transformers-compat >= 0.4 && < 0.6 else buildable: False @@ -140,6 +145,7 @@ buildable: True build-depends: base >= 4.6 && < 4.9+ , base-compat >= 0.8 && < 0.10 , rest-example , rest-gen >= 0.14 && < 0.20 else