| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Servant.Client.Internal.HttpClient.Streaming
Synopsis
- newtype ClientM a = ClientM {}
- client :: HasClient ClientM api => Proxy api -> Client ClientM api
- runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ClientError a)
- hoistClient :: HasClient ClientM api => Proxy api -> (forall a. m a -> n a) -> Client m api -> Client n api
- withClientM :: ClientM a -> ClientEnv -> (Either ClientError a -> IO b) -> IO b
- performRequest :: Maybe [Status] -> Request -> ClientM Response
- performWithStreamingRequest :: Request -> (StreamingResponse -> IO a) -> ClientM a
- data ClientEnv = ClientEnv {
- manager :: Manager
- baseUrl :: BaseUrl
- cookieJar :: Maybe (TVar CookieJar)
- makeClientRequest :: BaseUrl -> Request -> IO Request
- mkClientEnv :: Manager -> BaseUrl -> ClientEnv
- clientResponseToResponse :: (a -> b) -> Response a -> ResponseF b
- defaultMakeClientRequest :: BaseUrl -> Request -> IO Request
- catchConnectionError :: IO a -> IO (Either ClientError a)
Documentation
ClientM is the monad in which client functions run. Contains the
Manager and BaseUrl used for requests in the reader environment.
Instances
| MonadIO ClientM Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming | |
| Applicative ClientM Source # | |
| Functor ClientM Source # | |
| Monad ClientM Source # | |
| Alt ClientM Source # | Try clients in order, last error is preserved. |
| RunClient ClientM Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming Methods runRequestAcceptStatus :: Maybe [Status] -> Request -> ClientM Response throwClientError :: ClientError -> ClientM a | |
| RunStreamingClient ClientM Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming Methods withStreamingRequest :: Request -> (StreamingResponse -> IO a) -> ClientM a | |
| MonadError ClientError ClientM Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming Methods throwError :: ClientError -> ClientM a catchError :: ClientM a -> (ClientError -> ClientM a) -> ClientM a | |
| MonadReader ClientEnv ClientM Source # | |
| MonadBase IO ClientM Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming | |
| Generic (ClientM a) Source # | |
| type Rep (ClientM a) Source # | |
Defined in Servant.Client.Internal.HttpClient.Streaming type Rep (ClientM a) = D1 ('MetaData "ClientM" "Servant.Client.Internal.HttpClient.Streaming" "servant-client-0.20-73KaafGh6hx5JNbs4Zje3e" 'True) (C1 ('MetaCons "ClientM" 'PrefixI 'True) (S1 ('MetaSel ('Just "unClientM") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (ReaderT ClientEnv (ExceptT ClientError (Codensity IO)) a)))) | |
client :: HasClient ClientM api => Proxy api -> Client ClientM api Source #
Generates a set of client functions for an API.
Example:
type API = Capture "no" Int :> Get '[JSON] Int
:<|> Get '[JSON] [Bool]
api :: Proxy API
api = Proxy
getInt :: Int -> ClientM Int
getBools :: ClientM [Bool]
getInt :<|> getBools = client apirunClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ClientError a) Source #
A runClientM variant for streaming client.
It allows using this module's ClientM in a direct style.
The NFData constraint however prevents using this function with genuine
streaming response types (SourceT, Conduit, pipes Proxy or Machine).
For those you have to use withClientM.
Note: we force the result, so the likelihood of accidentally leaking a
connection is smaller. Use with care.
hoistClient :: HasClient ClientM api => Proxy api -> (forall a. m a -> n a) -> Client m api -> Client n api Source #
Change the monad the client functions live in, by supplying a conversion function (a natural transformation to be precise).
For example, assuming you have some manager :: and
Managerbaseurl :: around:BaseUrl
type API = Get '[JSON] Int :<|> Capture "n" Int :> Post '[JSON] Int api :: Proxy API api = Proxy getInt :: IO Int postInt :: Int -> IO Int getInt :<|> postInt = hoistClient api (flip runClientM cenv) (client api) where cenv = mkClientEnv manager baseurl
withClientM :: ClientM a -> ClientEnv -> (Either ClientError a -> IO b) -> IO b Source #
performRequest :: Maybe [Status] -> Request -> ClientM Response Source #
performWithStreamingRequest :: Request -> (StreamingResponse -> IO a) -> ClientM a Source #
TODO: support UVerb (acceptStatus argument, like in performRequest above).
The environment in which a request is run.
The baseUrl and makeClientRequest function are used to create a http-client request.
Cookies are then added to that request if a CookieJar is set on the environment.
Finally the request is executed with the manager.
The makeClientRequest function can be used to modify the request to execute and set values which
are not specified on a servant RequestF like responseTimeout or redirectCount
Constructors
| ClientEnv | |
Fields
| |
mkClientEnv :: Manager -> BaseUrl -> ClientEnv Source #
ClientEnv smart constructor.
clientResponseToResponse :: (a -> b) -> Response a -> ResponseF b Source #
defaultMakeClientRequest :: BaseUrl -> Request -> IO Request Source #
Create a http-client Request from a servant RequestF
The host, path and port fields are extracted from the BaseUrl
otherwise the body, headers and query string are derived from the servant RequestF
catchConnectionError :: IO a -> IO (Either ClientError a) Source #