{-| Module : Twfy.Api Description : Client API definition Servant client API for Different calls are being implemented as needed for now so if you require any of the API calls that are not yet implemented please either submit a pull request via github or let me know you want it and I will add it myself. TODO: getPerson, getMPInfo, getMPsInfo, getLord, getLords, getMLA, getMLAs, getMSP, getMSPs, getGeometry, getBoundary, getCommittee, getDebates, getWrans, getWMS, getHansard, getComments -} {-# LANGUAGE DataKinds #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} module Twfy.Api ( TwfyAPI , ApiKey , getConstituency , getConstituencies , getMP , getMPs ) where import Data.Proxy import Servant.API import Servant.Client import qualified Data.Text as T import Twfy.Data.JsonIso8859 import Twfy.Data.Constituency import Twfy.Data.MP -- | API Key type ApiKey = T.Text -- | Servant API definition type TwfyAPI = "getConstituency" :> QueryParam "key" ApiKey :> QueryParam "name" T.Text :> QueryParam "postcode" T.Text :> Get '[JsonIso8859] Constituency :<|> "getConstituencies" :> QueryParam "key" ApiKey :> Get '[JsonIso8859] [Constituency] :<|> "getMP" :> QueryParam "key" ApiKey :> QueryParam "id" Int :> QueryParam "constituency" T.Text :> QueryParam "postcode" T.Text :> QueryParam "always_return" Bool :> Get '[JsonIso8859] MP :<|> "getMPs" :> QueryParam "key" ApiKey :> QueryParam "search" T.Text :> QueryParam "party" T.Text :> QueryParam "date" T.Text -- TODO: change this to a date :> Get '[JsonIso8859] [MP] twfyAPI :: Proxy TwfyAPI twfyAPI = Proxy -- TODO: convertURL -- | The 'getConstituency' function retreives a constituency based on name or post code getConstituency :: Maybe ApiKey -- ^ API key -> Maybe T.Text -- ^ Name -> Maybe T.Text -- ^ Post code -> ClientM Constituency -- | The 'getConstituencies' function retreives all constituencies getConstituencies :: Maybe ApiKey -- ^ API key -> ClientM [Constituency] -- | The 'getMP' function retreives an MP getMP :: Maybe ApiKey -- ^ API key -> Maybe Int -- ^ Id -> Maybe T.Text -- ^ Constituency name -> Maybe T.Text -- ^ Post code -> Maybe Bool -- ^ Always return -> ClientM MP -- | The 'getMPs' function retreives a list of MPs getMPs :: Maybe ApiKey -- ^ API key -> Maybe T.Text -- ^ Name search -> Maybe T.Text -- ^ party name -> Maybe T.Text -- ^ Date -> ClientM [MP] -- TODO: getPerson -- TODO: getMPInfo -- TODO: getMPsInfo -- TODO: getLord -- TODO: getLords -- TODO: getMLA -- TODO: getMLAs -- TODO: getMSP -- TODO: getMSPs -- TODO: getGeometry -- TODO: getBoundary -- TODO: getCommittee -- TODO: getDebates -- TODO: getWrans -- TODO: getWMS -- TODO: getHansard -- TODO: getComments (getConstituency :<|> getConstituencies :<|> getMP :<|> getMPs) = client twfyAPI