{-# LANGUAGE DataKinds #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-} module ChatWork.Client ( Token , ChatWorkClient(..) , Client(..) ) where import Data.ByteString (ByteString) import Network.HTTP.Req (Option, Scheme (Https), Url, header, https, (/:)) type Token = ByteString newtype ChatWorkClient = ChatWorkClient Token -- | -- By using type class, the same functions can be used for mock servers and local hosts. class Client a where type ClientScheme a :: Scheme baseUrl :: a -> Url (ClientScheme a) mkHeader :: a -> Option scheme instance Client ChatWorkClient where type ClientScheme ChatWorkClient = 'Https baseUrl = const (https "api.chatwork.com" /: "v2") mkHeader (ChatWorkClient token) = header "X-ChatWorkToken" token