{-# LANGUAGE RankNTypes #-}
module Smtpbz.Internal.Has
  ( Has(..)
  ) where

import Data.ByteString (ByteString)
import Data.Text (Text)

import Smtpbz.Internal.Manager (Manager)


-- | smtp.bz configuration that is used by the library
-- and the user may want to override.
class Has t where
  -- | API key; get one at https://smtp.bz/panel/user
  apiKey :: t -> ByteString
  -- | API base URL; Most likely, https://api.smtp.bz/v1
  baseUrl :: t -> Text
  -- | The Manager under which all requests will be made.
  --
  -- The default Manager is incompatible with outdated smtpbz servers because
  -- it requires the Extended Main Secret extension, which those servers do not support.
  -- Therefore, we define a newtype to prevent unintentional passing of an incompatible
  -- Manager to API methods, which would result in a runtime error.
  httpMan :: t -> Manager