@@ -1,6 +1,7 @@
1{-# LANGUAGE DataKinds #-}
1{-# LANGUAGE DataKinds #-}
2−{-# LANGUAGE TypeOperators #-}
3{-# LANGUAGE GADTs #-}
2{-# LANGUAGE GADTs #-}
3+{-# LANGUAGE OverloadedStrings #-}
4+{-# LANGUAGE TypeOperators #-}
4{-# LANGUAGE ViewPatterns #-}
5{-# LANGUAGE ViewPatterns #-}
6module Servant.ClientSpec where
7module Servant.ClientSpec where
@@ -8,10 +9,12 @@ module Servant.ClientSpec where
8import Control.Concurrent
9import Control.Concurrent
9import Control.Exception
10import Control.Exception
10import Control.Monad.Trans.Either
11import Control.Monad.Trans.Either
12+import Data.ByteString.Lazy (ByteString)
11import Data.Char
13import Data.Char
12import Data.Foldable (forM_)
14import Data.Foldable (forM_)
13import Data.Proxy
15import Data.Proxy
14import Data.Typeable
16import Data.Typeable
17+import Network.HTTP.Types
15import Network.Socket
18import Network.Socket
16import Network.Wai
19import Network.Wai
17import Network.Wai.Handler.Warp
20import Network.Wai.Handler.Warp
@@ -33,6 +36,8 @@ type Api =
33 :<|> "param" :> QueryParam "name" String :> Get Person
36 :<|> "param" :> QueryParam "name" String :> Get Person
34 :<|> "params" :> QueryParams "names" String :> Get [Person]
37 :<|> "params" :> QueryParams "names" String :> Get [Person]
35 :<|> "flag" :> QueryFlag "flag" :> Get Bool
38 :<|> "flag" :> QueryFlag "flag" :> Get Bool
39+ :<|> "rawSuccess" :> Raw
40+ :<|> "rawFailure" :> Raw
36 :<|> "multiple" :>
41 :<|> "multiple" :>
37 Capture "first" String :>
42 Capture "first" String :>
38 QueryParam "second" Int :>
43 QueryParam "second" Int :>
@@ -53,6 +58,8 @@ server = serve api (
53 Nothing -> left (400, "missing parameter"))
58 Nothing -> left (400, "missing parameter"))
54 :<|> (\ names -> return (zipWith Person names [0..]))
59 :<|> (\ names -> return (zipWith Person names [0..]))
55 :<|> return
60 :<|> return
61+ :<|> (\ _request respond -> respond $ responseLBS ok200 [] "rawSuccess")
62+ :<|> (\ _request respond -> respond $ responseLBS badRequest400 [] "rawFailure")
56 :<|> \ a b c d -> return (a, b, c, d)
63 :<|> \ a b c d -> return (a, b, c, d)
@@ -65,6 +72,8 @@ getBody :: Person -> BaseUrl -> EitherT String IO Person
65getQueryParam :: Maybe String -> BaseUrl -> EitherT String IO Person
72getQueryParam :: Maybe String -> BaseUrl -> EitherT String IO Person
66getQueryParams :: [String] -> BaseUrl -> EitherT String IO [Person]
73getQueryParams :: [String] -> BaseUrl -> EitherT String IO [Person]
67getQueryFlag :: Bool -> BaseUrl -> EitherT String IO Bool
74getQueryFlag :: Bool -> BaseUrl -> EitherT String IO Bool
75+getRawSuccess :: Method -> BaseUrl -> EitherT String IO ByteString
76+getRawFailure :: Method -> BaseUrl -> EitherT String IO ByteString
68getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
77getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
69 -> BaseUrl
78 -> BaseUrl
70 -> EitherT String IO (String, Maybe Int, Bool, [(String, [Rational])])
79 -> EitherT String IO (String, Maybe Int, Bool, [(String, [Rational])])
@@ -74,6 +83,8 @@ getMultiple :: String -> Maybe Int -> Bool -> [(String, [Rational])]
74 :<|> getQueryParam
83 :<|> getQueryParam
75 :<|> getQueryParams
84 :<|> getQueryParams
76 :<|> getQueryFlag
85 :<|> getQueryFlag
77 :<|> getMultiple)
88 :<|> getMultiple)
78 = client api
89 = client api