@@ -1,13 +1,17 @@
1{-# LANGUAGE FlexibleContexts #-}
1{-# LANGUAGE FlexibleContexts #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
2{-# LANGUAGE MultiParamTypeClasses #-}
3+{-# LANGUAGE OverloadedStrings #-}
3{-# LANGUAGE ScopedTypeVariables #-}
4{-# LANGUAGE ScopedTypeVariables #-}
4{-# LANGUAGE TypeFamilies #-}
5{-# LANGUAGE TypeFamilies #-}
5−{-# LANGUAGE OverloadedStrings #-}
6-- | Types for possible backends to run client-side `Request` queries
6-- | Types for possible backends to run client-side `Request` queries
7module Servant.Client.Core.Internal.RunClient where
7module Servant.Client.Core.Internal.RunClient where
9import Control.Monad (unless)
12import Control.Monad (unless)
10import Control.Monad.Error.Class (MonadError, throwError)
13import Control.Monad.Error.Class (MonadError, throwError)
14+import Data.Foldable (toList)
11import Data.Proxy (Proxy)
15import Data.Proxy (Proxy)
12import qualified Data.Text as T
16import qualified Data.Text as T
13import Network.HTTP.Media (MediaType, matches,
17import Network.HTTP.Media (MediaType, matches,
@@ -17,7 +21,6 @@ import Servant.API (MimeUnrender,
17 mimeUnrender)
21 mimeUnrender)
18import Servant.Client.Core.Internal.Request (Request, Response (..),
22import Servant.Client.Core.Internal.Request (Request, Response (..),
19 ServantError (..))
23 ServantError (..))
20−import Data.Foldable (toList)
22class (MonadError ServantError m) => RunClient m where
25class (MonadError ServantError m) => RunClient m where
23 -- | How to make a request.
26 -- | How to make a request.
@@ -26,10 +29,10 @@ class (MonadError ServantError m) => RunClient m where
26checkContentTypeHeader :: RunClient m => Response -> m MediaType
29checkContentTypeHeader :: RunClient m => Response -> m MediaType
27checkContentTypeHeader response =
30checkContentTypeHeader response =
28 case lookup "Content-Type" $ toList $ responseHeaders response of
31 case lookup "Content-Type" $ toList $ responseHeaders response of
29− Nothing -> pure $ "application"//"octet-stream"
32+ Nothing -> return $ "application"//"octet-stream"
30 Just t -> case parseAccept t of
33 Just t -> case parseAccept t of
31 Nothing -> throwError $ InvalidContentTypeHeader response
34 Nothing -> throwError $ InvalidContentTypeHeader response
32− Just t' -> pure t'
35+ Just t' -> return t'
34decodedAs :: forall ct a m. (MimeUnrender ct a, RunClient m)
37decodedAs :: forall ct a m. (MimeUnrender ct a, RunClient m)
35 => Response -> Proxy ct -> m a
38 => Response -> Proxy ct -> m a