{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeOperators     #-}
{-|
Copyright   : (c) 2020-2021 Tim Emiola
SPDX-License-Identifier: BSD3
Maintainer  : Tim Emiola <adetokunbo@users.noreply.github.com>

Defines client combinators that access the demo service

-}
module TmpProc.Example2.Client
  ( -- * Client combinators
    fetch
  , create
  ) where

import           Servant.API             ((:<|>) (..))
import           Servant.Client          (ClientM, client)

import           TmpProc.Example2.Routes (contactsAPI)
import           TmpProc.Example2.Schema (Contact, ContactID)

{-| Fetch a contact via the API. -}
fetch :: ContactID -> ClientM Contact

{-| Create a contact via the API. -}
create :: Contact -> ClientM ContactID
(ContactID -> ClientM Contact
fetch :<|> Contact -> ClientM ContactID
create) = Proxy ContactsAPI -> Client ClientM ContactsAPI
forall api.
HasClient ClientM api =>
Proxy api -> Client ClientM api
client Proxy ContactsAPI
contactsAPI