-- | -- Smith API definition request combinators. -- -- You shouldn't need these unless defining custom/additional calls, see -- 'Smith.Client.Api' for complete API definition. -- {-# LANGUAGE OverloadedStrings #-} module Smith.Client.Request ( Request (..) , Requester (..) , none , json ) where import qualified Data.Aeson as Aeson import Data.Aeson (Value) import Data.Text (Text) import qualified Network.HTTP.Client as HTTP import qualified Network.HTTP.Types as HTTP import Smith.Client.Response (Responder (..)) data Request a = Request { requestMethod :: HTTP.StdMethod , requestPath :: Text , requestResponder :: Responder a , requestRequester :: Requester } newtype Requester = Requester { runRequester :: HTTP.Request -> HTTP.Request } none :: Requester none = Requester $ \request -> request { HTTP.requestHeaders = [ ("Accept", "application/json") ] ++ HTTP.requestHeaders request } json :: Value -> Requester json value = Requester $ \request -> request { HTTP.requestBody = HTTP.RequestBodyLBS (Aeson.encode value) , HTTP.requestHeaders = [ ("Content-Type", "application/json") , ("Accept", "application/json") ] ++ HTTP.requestHeaders request }