{-# LANGUAGE TypeFamilies         #-}
{-# LANGUAGE TypeOperators        #-}
{-# LANGUAGE UndecidableInstances #-}
module Servant.API (

  -- * Combinators
  module Servant.API.Sub,
  -- | Type-level combinator for expressing subrouting: @':>'@
  module Servant.API.Alternative,
  -- | Type-level combinator for alternative endpoints: @':<|>'@

  -- * Accessing information from the request
  module Servant.API.Capture,
  -- | Capturing parts of the url path as parsed values: @'Capture'@
  module Servant.API.Header,
  -- | Retrieving specific headers from the request
  module Servant.API.QueryParam,
  -- | Retrieving parameters from the query string of the 'URI': @'QueryParam'@
  module Servant.API.ReqBody,
  -- | Accessing the request body as a JSON-encoded type: @'ReqBody'@
  module Servant.API.MatrixParam,
  -- | Retrieving matrix parameters from the 'URI' segment: @'MatrixParam'@

  -- * Actual endpoints, distinguished by HTTP method
  module Servant.API.Get,
  -- | @GET@ requests
  module Servant.API.Post,
  -- | @POST@ requests
  module Servant.API.Delete,
  -- | @DELETE@ requests
  module Servant.API.Put,
  -- | @PUT@ requests
  module Servant.API.Patch,
  -- | @PATCH@ requests

  -- * Content Types
  module Servant.API.ContentTypes,
  -- | Serializing and deserializing types based on @Accept@ and
  -- @Content-Type@ headers.

  -- * Response Headers
  module Servant.API.ResponseHeaders,

  -- * Untyped endpoints
  module Servant.API.Raw,
  -- | Plugging in a wai 'Network.Wai.Application', serving directories

  -- * FromText and ToText
  module Servant.Common.Text,
  -- | Classes and instances for types that can be converted to and from @Text@

  -- * Utilities
  module Servant.Utils.Links,
  -- | Type-safe internal URIs
  ) where

import           Servant.API.Alternative     ((:<|>) (..))
import           Servant.API.Capture         (Capture)
import           Servant.API.ContentTypes    (Accept (..), FormUrlEncoded,
                                              FromFormUrlEncoded (..), JSON,
                                              MimeRender (..),
                                              MimeUnrender (..), OctetStream,
                                              PlainText, ToFormUrlEncoded (..))
import           Servant.API.Delete          (Delete)
import           Servant.API.Get             (Get)
import           Servant.API.Header          (Header (..))
import           Servant.API.MatrixParam     (MatrixFlag, MatrixParam,
                                              MatrixParams)
import           Servant.API.Patch           (Patch)
import           Servant.API.Post            (Post)
import           Servant.API.Put             (Put)
import           Servant.API.QueryParam      (QueryFlag, QueryParam,
                                              QueryParams)
import           Servant.API.Raw             (Raw)
import           Servant.API.ReqBody         (ReqBody)
import           Servant.API.ResponseHeaders (AddHeader (addHeader),
                                              BuildHeadersTo (buildHeadersTo),
                                              GetHeaders (getHeaders),
                                              HList (..), Headers (..),
                                              getHeadersHList, getResponse)
import           Servant.API.Sub             ((:>))
import           Servant.Common.Text         (FromText (..), ToText (..))
import           Servant.Utils.Links         (HasLink (..), IsElem, IsElem',
                                              URI (..), safeLink)