servant-client-0.15: Automatic derivation of querying functions for servant

Safe HaskellNone
LanguageHaskell2010

Servant.Client.Streaming

Description

This module provides client which can automatically generate querying functions for each endpoint just from the type representing your API.

This client supports streaming operations.

Synopsis

Documentation

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 api

data ClientM a Source #

ClientM is the monad in which client functions run. Contains the Manager and BaseUrl used for requests in the reader environment.

Instances
Monad ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

(>>=) :: ClientM a -> (a -> ClientM b) -> ClientM b #

(>>) :: ClientM a -> ClientM b -> ClientM b #

return :: a -> ClientM a #

fail :: String -> ClientM a #

Functor ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

fmap :: (a -> b) -> ClientM a -> ClientM b #

(<$) :: a -> ClientM b -> ClientM a #

Applicative ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

pure :: a -> ClientM a #

(<*>) :: ClientM (a -> b) -> ClientM a -> ClientM b #

liftA2 :: (a -> b -> c) -> ClientM a -> ClientM b -> ClientM c #

(*>) :: ClientM a -> ClientM b -> ClientM b #

(<*) :: ClientM a -> ClientM b -> ClientM a #

MonadIO ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

liftIO :: IO a -> ClientM a #

Alt ClientM Source #

Try clients in order, last error is preserved.

Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

RunClient ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

RunStreamingClient ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

MonadReader ClientEnv ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

ask :: ClientM ClientEnv #

local :: (ClientEnv -> ClientEnv) -> ClientM a -> ClientM a #

reader :: (ClientEnv -> a) -> ClientM a #

MonadBase IO ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

liftBase :: IO α -> ClientM α #

MonadError ServantError ClientM Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Generic (ClientM a) Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Associated Types

type Rep (ClientM a) :: Type -> Type #

Methods

from :: ClientM a -> Rep (ClientM a) x #

to :: Rep (ClientM a) x -> ClientM a #

ClientLike (ClientM a) (ClientM a) Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

Methods

mkClient :: ClientM a -> ClientM a #

type Rep (ClientM a) Source # 
Instance details

Defined in Servant.Client.Internal.HttpClient.Streaming

type Rep (ClientM a) = D1 (MetaData "ClientM" "Servant.Client.Internal.HttpClient.Streaming" "servant-client-0.15-56sh1Oc50wt6nvXI81IXY4" True) (C1 (MetaCons "ClientM" PrefixI True) (S1 (MetaSel (Just "unClientM") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 (ReaderT ClientEnv (ExceptT ServantError (Codensity IO)) a))))

runClientM :: NFData a => ClientM a -> ClientEnv -> IO (Either ServantError 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 likehood of accidentally leaking a connection is smaller. Use with care.

data ClientEnv Source #

The environment in which a request is run.

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 :: Manager and baseurl :: BaseUrl around:

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