-- | Generalizes all the data needed to make code generation work with
-- arbitrary programming languages.
--
-- See documentation of 'HasForeignType' for a simple example. 'listFromAPI' returns a list of all your endpoints and their foreign types, given a mapping from Haskell types to foreign types (conventionally called `ftypes` below).
module Servant.Foreign
  ( -- * Main API
    listFromAPI
  , Req (..)
  , defReq
  , HasForeignType (..)
  , GenerateList (..)
  , HasForeign (..)
  , NoTypes

    -- * Subtypes of 'Req'
  , Url (..)
  , Path
  , Segment (..)
  , SegmentType (..)
  , isCapture
  , captureArg
  , QueryArg (..)
  , ArgType (..)
  , HeaderArg (..)
  , Arg (..)
  , FunctionName (..)
  , ReqBodyContentType (..)
  , PathSegment (..)

    -- * Lenses
  , argName
  , argType
  , argPath
  , reqUrl
  , reqMethod
  , reqHeaders
  , reqBody
  , reqBodyContentType
  , reqReturnType
  , reqFuncName
  , path
  , queryStr
  , queryArgName
  , queryArgType
  , headerArg

    -- * Prisms
  , _PathSegment
  , _HeaderArg
  , _ReplaceHeaderArg
  , _Static
  , _Cap
  , _Normal
  , _Flag
  , _List

    -- * Re-exports
  , module Servant.API
  , module Servant.Foreign.Inflections
  )
where

import Servant.API

import Servant.Foreign.Inflections
import Servant.Foreign.Internal
