@@ -2,17 +2,9 @@
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Servant.Client where
3module Servant.Client where
5−import Control.Concurrent
6−import Control.Monad.Catch
7−import Data.ByteString.Lazy
8import Data.Proxy
5import Data.Proxy
10−import Network.HTTP.Client hiding (Proxy)
11−import Network.HTTP.Types
13−import System.IO.Unsafe
15−import Servant.Utils.BaseUrl
7+import Servant.Utils.Req
17-- * Accessing APIs as a Client
9-- * Accessing APIs as a Client
@@ -23,53 +15,3 @@ client p = clientWithRoute p defReq
23class HasClient layout where
15class HasClient layout where
24 type Client layout :: *
16 type Client layout :: *
25 clientWithRoute :: Proxy layout -> Req -> Client layout
17 clientWithRoute :: Proxy layout -> Req -> Client layout
30− , reqBody :: ByteString
36−appendToPath :: String -> Req -> Req
38− req { reqPath = reqPath req ++ "/" ++ p }
40−appendToQueryString :: Text -- ^ param name
41− -> Maybe Text -- ^ param value
44−appendToQueryString pname pvalue req =
45− req { qs = qs req ++ [(pname, pvalue)]
48−setRQBody :: ByteString -> Req -> Req
49−setRQBody b req = req { reqBody = b }
51−reqToRequest :: (Functor m, MonadThrow m) => Req -> BaseUrl -> m Request
52−reqToRequest req (BaseUrl scheme host port) = fmap (setrqb . setQS ) $ parseUrl url
54− where url = show $ nullURI { uriScheme = case scheme of
57− , uriAuthority = Just $
58− URIAuth { uriUserInfo = ""
60− , uriPort = ":" ++ show port
62− , uriPath = reqPath req
65− setrqb r = r { requestBody = RequestBodyLBS (reqBody req) }
66− setQS = setQueryString $ queryTextToQuery (qs req)
68−{-# NOINLINE __manager #-}
69−__manager :: MVar Manager
70−__manager = unsafePerformIO (newManager defaultManagerSettings >>= newMVar)
72−__withGlobalManager :: (Manager -> IO a) -> IO a
73−__withGlobalManager action = modifyMVar __manager $ \ manager -> do
74− result <- action manager
75− return (manager, result)