-- | This module provides backend-agnostic functionality for generating clients
-- from @servant@ APIs. By "backend," we mean something that concretely
-- executes the request, such as:
--
--  * The @http-client@ library
--  * The @haxl@ library
--  * GHCJS via FFI
--
-- etc.
--
-- Each backend is encapsulated in a monad that is an instance of the
-- 'RunClient' class.
--
-- This library is primarily of interest to backend-writers and
-- combinator-writers. For more information, see the README.md
module Servant.Client.Core
  ( -- * Client generation
    clientIn
  , HasClient (..)
  , foldMapUnion
  , matchUnion

    -- * Request
  , Request
  , RequestF (..)
  , defaultRequest
  , RequestBody (..)

    -- * Authentication
  , mkAuthenticatedRequest
  , basicAuthReq
  , AuthenticatedRequest (..)
  , AuthClientData

    -- * Generic Client
  , ClientError (..)
  , EmptyClient (..)

    -- * Response
  , Response
  , ResponseF (..)
  , RunClient (..)

    -- * BaseUrl
  , BaseUrl (..)
  , Scheme (..)
  , showBaseUrl
  , parseBaseUrl
  , InvalidBaseUrlException (..)

    -- ** Streaming
  , RunStreamingClient (..)
  , StreamingResponse

    -- * Writing HasClient instances

    -- | These functions need not be re-exported by backend libraries.
  , addHeader
  , appendToQueryString
  , appendToPath
  , setRequestBodyLBS
  , setRequestBody
  , encodeQueryParamValue
  )
where

import Servant.Client.Core.Auth
import Servant.Client.Core.BaseUrl
  ( BaseUrl (..)
  , InvalidBaseUrlException (..)
  , Scheme (..)
  , parseBaseUrl
  , showBaseUrl
  )
import Servant.Client.Core.BasicAuth
import Servant.Client.Core.ClientError
import Servant.Client.Core.HasClient
import Servant.Client.Core.Request
import Servant.Client.Core.Response
import Servant.Client.Core.RunClient
