{-|
Module      : Servant.API.DB
Description : Type level DSL for describing API to DB
Portability : Portable

The idea of package is to provide <http://haskell-servant.readthedocs.io/en/stable/ servant>-like
DSL for specifying an API for functions stored in RDBMS.

@
data RegisterUser = RegisterUser {
  userName :: Text
, userPassword :: Text
, userPhone :: Phone
, userEmail :: Email
}

type API =
       ArgNamed "user" RegisterUser
    :> ArgNamed "isAdmin" Bool
    :> Procedure "registerUser" (Maybe (Only UserId))
  :<|> ArgPos UserId
    :> Procedure "getUser" (Maybe User)
  :<|> Procedure "listUsers" [User]
@

The library adds three custom combinators:
* `ArgNamed name a` - named argument of stored function of type `a`.

* `ArgPos a` - unamed argument of stored function of type `a`.

* `Procedure name a` - named stored function with return type `a`.

Related libraries:

* <https://github.com/NCrashed/servant-db-postgresql servant-db-postgresql> -
    derives client for PostgreSQL with <http://hackage.haskell.org/package/postgresql-query postgresql-query> library.

-}
module Servant.API.DB(
    module Reexport
  ) where

import           Servant.API              as Reexport ((:<|>) (..), (:>))
import           Servant.API.DB.Argument  as Reexport
import           Servant.API.DB.Procedure as Reexport