on master help sign in
Merge pull request #7 from zerobuzz/2015-01-06-explicit-import-lists
9ef336bAlp Mestanogullari
src/Servant/Server.hs+5−4
@@ -11,10 +11,12 @@ module Servant.Server
11 HasServer(..)
11 HasServer(..)
12 ) where
12 ) where
13
13
14−import Data.Proxy
14+import Data.Proxy (Proxy)
15−import Network.Wai
15+import Network.Wai (Application)
16+
16import Servant.Server.Internal
17import Servant.Server.Internal
17
18
19+
18-- * Implementing Servers
20-- * Implementing Servers
19
21
20-- | 'serve' allows you to implement an API and produce a wai 'Application'.
22-- | 'serve' allows you to implement an API and produce a wai 'Application'.
@@ -30,7 +32,7 @@ import Servant.Server.Internal
30-- > postBook book = ...
32-- > postBook book = ...
31-- >
33-- >
32-- > myApi :: Proxy MyApi
34-- > myApi :: Proxy MyApi
33−-- > myApi = Proxy
35+-- > myApi = Proxy
34-- >
36-- >
35-- > app :: Application
37-- > app :: Application
36-- > app = serve myApi server
38-- > app = serve myApi server
@@ -39,4 +41,3 @@ import Servant.Server.Internal
39-- > main = Network.Wai.Handler.Warp.run 8080 app
41-- > main = Network.Wai.Handler.Warp.run 8080 app
40serve :: HasServer layout => Proxy layout -> Server layout -> Application
42serve :: HasServer layout => Proxy layout -> Server layout -> Application
41serve p server = toApplication (route p server)
43serve p server = toApplication (route p server)
42−
src/Servant/Server/Internal.hs+14−12
@@ -7,24 +7,26 @@
7{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
8module Servant.Server.Internal where
8module Servant.Server.Internal where
9
9
10−import Control.Applicative
10+import Control.Applicative ((<$>))
11−import Control.Monad.Trans.Either
11+import Control.Monad.Trans.Either (EitherT, runEitherT)
12−import Data.Aeson
12+import Data.Aeson (ToJSON, FromJSON, encode, decode')
13import qualified Data.ByteString as B
13import qualified Data.ByteString as B
14import qualified Data.ByteString.Lazy as BL
14import qualified Data.ByteString.Lazy as BL
15−import Data.IORef
15+import Data.IORef (newIORef, readIORef, writeIORef)
16import Data.Maybe (catMaybes)
16import Data.Maybe (catMaybes)
17−import Data.Monoid
17+import Data.Monoid (Monoid, mempty, mappend)
18−import Data.Proxy
18+import Data.Proxy (Proxy(Proxy))
19−import Data.String
19+import Data.String (fromString)
20−import Data.String.Conversions
20+import Data.String.Conversions (cs, (<>))
21import Data.Text.Encoding (decodeUtf8)
21import Data.Text.Encoding (decodeUtf8)
22import Data.Text (Text)
22import Data.Text (Text)
23−import GHC.TypeLits
23+import GHC.TypeLits (KnownSymbol, symbolVal)
24import Network.HTTP.Types hiding (Header)
24import Network.HTTP.Types hiding (Header)
25−import Network.Wai
25+import Network.Wai (Response, Request, ResponseReceived, Application, pathInfo, requestBody,
26−import Servant.API
26+ strictRequestBody, lazyRequestBody, requestHeaders, requestMethod,
27+ rawQueryString, responseLBS)
28+import Servant.API (QueryParams, QueryParam, QueryFlag, ReqBody, Header, Capture, Get, Delete, Put, Post, Raw, (:>), (:<|>)(..))
27−import Servant.Common.Text
29+import Servant.Common.Text (FromText, fromText)
28
30
29data ReqBodyState = Uncalled
31data ReqBodyState = Uncalled
30 | Called !B.ByteString
32 | Called !B.ByteString
src/Servant/Utils/StaticFiles.hs+3−3
@@ -7,9 +7,9 @@ module Servant.Utils.StaticFiles (
7 ) where
7 ) where
8
8
9import Filesystem.Path.CurrentOS (decodeString)
9import Filesystem.Path.CurrentOS (decodeString)
10−import Network.Wai.Application.Static
10+import Network.Wai.Application.Static (staticApp, defaultFileServerSettings)
11−import Servant.API.Raw
11+import Servant.API.Raw (Raw)
12−import Servant.Server.Internal
12+import Servant.Server.Internal (Server)
13
13
14-- | Serve anything under the specified directory as a 'Raw' endpoint.
14-- | Serve anything under the specified directory as a 'Raw' endpoint.
15--
15--
test/Servant/ServerSpec.hs+28−28
@@ -8,28 +8,28 @@
8module Servant.ServerSpec where
8module Servant.ServerSpec where
9
9
10
10
11−import Control.Monad.Trans.Either
11+import Control.Monad.Trans.Either (EitherT, left)
12−import Data.Aeson
12+import Data.Aeson (ToJSON, FromJSON, encode, decode')
13−import Data.Char
13+import Data.Char (toUpper)
14−import Data.Proxy
14+import Data.Proxy (Proxy(Proxy))
15−import Data.String
15+import Data.String (fromString)
16−import Data.String.Conversions
16+import Data.String.Conversions (cs)
17−import GHC.Generics
17+import GHC.Generics (Generic)
18−import Network.HTTP.Types
18+import Network.HTTP.Types (parseQuery, ok200)
19−import Network.Wai
19+import Network.Wai (Application, Request, responseLBS, pathInfo, queryString, rawQueryString)
20−import Network.Wai.Test
20+import Network.Wai.Test (runSession, request, defaultRequest, simpleBody)
21−import Test.Hspec
21+import Test.Hspec (Spec, describe, it, shouldBe)
22−import Test.Hspec.Wai
22+import Test.Hspec.Wai (liftIO, with, get, post, shouldRespondWith, matchStatus)
23−
23+
24−import Servant.API.Capture
24+import Servant.API.Capture (Capture)
25−import Servant.API.Get
25+import Servant.API.Get (Get)
26−import Servant.API.ReqBody
26+import Servant.API.ReqBody (ReqBody)
27−import Servant.API.Post
27+import Servant.API.Post (Post)
28−import Servant.API.QueryParam
28+import Servant.API.QueryParam (QueryParam, QueryParams, QueryFlag)
29−import Servant.API.Raw
29+import Servant.API.Raw (Raw)
30−import Servant.API.Sub
30+import Servant.API.Sub ((:>))
31−import Servant.API.Alternative
31+import Servant.API.Alternative ((:<|>)((:<|>)))
32−import Servant.Server
32+import Servant.Server (Server, serve)
33
33
34
34
35-- * test data types
35-- * test data types
@@ -94,8 +94,8 @@ captureSpec = do
94
94
95 with (return (serve
95 with (return (serve
96 (Proxy :: Proxy (Capture "captured" String :> Raw))
96 (Proxy :: Proxy (Capture "captured" String :> Raw))
97− (\ "captured" request respond ->
97+ (\ "captured" request_ respond ->
98− respond $ responseLBS ok200 [] (cs $ show $ pathInfo request)))) $ do
98+ respond $ responseLBS ok200 [] (cs $ show $ pathInfo request_)))) $ do
99 it "strips the captured path snippet from pathInfo" $ do
99 it "strips the captured path snippet from pathInfo" $ do
100 get "/captured/foo" `shouldRespondWith` (fromString (show ["foo" :: String]))
100 get "/captured/foo" `shouldRespondWith` (fromString (show ["foo" :: String]))
101
101
@@ -134,7 +134,7 @@ qpServer = queryParamServer :<|> qpNames :<|> qpCapitalize
134 qpCapitalize False = return alice
134 qpCapitalize False = return alice
135 qpCapitalize True = return alice { name = map toUpper (name alice) }
135 qpCapitalize True = return alice { name = map toUpper (name alice) }
136
136
137− queryParamServer (Just name) = return alice{name = name}
137+ queryParamServer (Just name_) = return alice{name = name_}
138 queryParamServer Nothing = return alice
138 queryParamServer Nothing = return alice
139
139
140queryParamSpec :: Spec
140queryParamSpec :: Spec
@@ -222,7 +222,7 @@ type RawApi = "foo" :> Raw
222rawApi :: Proxy RawApi
222rawApi :: Proxy RawApi
223rawApi = Proxy
223rawApi = Proxy
224rawApplication :: Show a => (Request -> a) -> Application
224rawApplication :: Show a => (Request -> a) -> Application
225−rawApplication f request respond = respond $ responseLBS ok200 [] (cs $ show $ f request)
225+rawApplication f request_ respond = respond $ responseLBS ok200 [] (cs $ show $ f request_)
226
226
227rawSpec :: Spec
227rawSpec :: Spec
228rawSpec = do
228rawSpec = do
@@ -264,7 +264,7 @@ unionSpec = do
264 liftIO $ do
264 liftIO $ do
265 decode' (simpleBody response) `shouldBe`
265 decode' (simpleBody response) `shouldBe`
266 Just alice
266 Just alice
267− response <- get "/bar"
267+ response_ <- get "/bar"
268 liftIO $ do
268 liftIO $ do
269− decode' (simpleBody response) `shouldBe`
269+ decode' (simpleBody response_) `shouldBe`
270 Just jerry
270 Just jerry
test/Servant/Utils/StaticFilesSpec.hs+16−16
@@ -5,22 +5,22 @@
5{-# OPTIONS_GHC -fno-warn-orphans #-}
5{-# OPTIONS_GHC -fno-warn-orphans #-}
6module Servant.Utils.StaticFilesSpec where
6module Servant.Utils.StaticFilesSpec where
7
7
8−import Control.Exception
8+import Control.Exception (bracket)
9−import Data.Proxy
9+import Data.Proxy (Proxy(Proxy))
10−import Network.Wai
10+import Network.Wai (Application)
11−import System.Directory
11+import System.Directory (getCurrentDirectory, setCurrentDirectory, createDirectory)
12−import System.IO.Temp
12+import System.IO.Temp (withSystemTempDirectory)
13−import Test.Hspec hiding (pending)
13+import Test.Hspec (Spec, describe, it, around_)
14−import Test.Hspec.Wai
14+import Test.Hspec.Wai (with, get, shouldRespondWith)
15
15
16−import Servant.API.Alternative
16+import Servant.API.Alternative ((:<|>)((:<|>)))
17−import Servant.API.Capture
17+import Servant.API.Capture (Capture)
18−import Servant.API.Get
18+import Servant.API.Get (Get)
19−import Servant.API.Raw
19+import Servant.API.Raw (Raw)
20−import Servant.API.Sub
20+import Servant.API.Sub ((:>))
21−import Servant.Server
21+import Servant.Server (Server, serve)
22−import Servant.ServerSpec
22+import Servant.ServerSpec (Person(Person))
23−import Servant.Utils.StaticFiles
23+import Servant.Utils.StaticFiles (serveDirectory)
24
24
25type Api =
25type Api =
26 "dummy_api" :> Capture "person_name" String :> Get Person
26 "dummy_api" :> Capture "person_name" String :> Get Person
@@ -35,7 +35,7 @@ app = serve api server
35
35
36server :: Server Api
36server :: Server Api
37server =
37server =
38− (\ name -> return (Person name 42))
38+ (\ name_ -> return (Person name_ 42))
39 :<|> serveDirectory "static"
39 :<|> serveDirectory "static"
40
40
41withStaticFiles :: IO () -> IO ()
41withStaticFiles :: IO () -> IO ()