module Network.API.Builder.Builder
  ( Builder(..)
  , basicBuilder ) where

import Network.API.Builder.Routes

import Data.Text (Text)
import Network.HTTP.Client (Request)
import qualified Data.Text as T

-- | Builder type for the API. Keeps track of the API's name and base URL, and how
--   to modify Routes and Requests before they're run.
data Builder = Builder { _name :: Text
                       , _baseURL :: Text
                       , _customizeRoute :: Route -> Route
                       , _customizeRequest :: Request -> Request }

instance Show Builder where
  show b = "Builder { name = " ++ T.unpack (_name b) ++ "}"

-- | Makes a basic builder, i.e. one that simply has a name and base URL
--   and doesn't fiddle with Routes / Requests.
basicBuilder :: Text -- ^ name
             -> Text -- ^ base url
             -> Builder -- ^ a simple @Builder@
basicBuilder n b = Builder n b id id