{-# LANGUAGE OverloadedStrings, TypeOperators, DataKinds #-}
module Linux.Arch.Aur.Rpc ( info, search ) where
import Control.Error.Util (hush)
import Data.Proxy
import Data.Text (Text)
import Linux.Arch.Aur.Types
import Network.HTTP.Client (Manager)
import Servant.API
import Servant.Client
type Info = "rpc" :> QueryParam "v" Text
:> QueryParam "type" Text
:> QueryParams "arg[]" Text
:> Get '[JSON] RPCResp
type Search = "rpc" :> QueryParam "v" Text
:> QueryParam "type" Text
:> QueryParam "arg" Text
:> Get '[JSON] RPCResp
type API = Info :<|> Search
api :: Proxy API
api = Proxy
url :: BaseUrl
url = BaseUrl Https "aur.archlinux.org" 443 ""
rpcI :<|> rpcS = client api
info :: Manager -> [Text] -> IO (Maybe [AurInfo])
info m ps = unwrap m $ rpcI (Just "5") (Just "info") ps
search :: Manager -> Text -> IO (Maybe [AurInfo])
search m p = unwrap m $ rpcS (Just "5") (Just "search") (Just p)
unwrap :: Manager -> ClientM RPCResp -> IO (Maybe [AurInfo])
unwrap m r = fmap _results . hush <$> runClientM r (ClientEnv m url Nothing)