module Linux.Arch.Aur.Rpc
( info, search ) where
import Control.Monad.IO.Class (MonadIO, liftIO)
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 :: MonadIO m => Manager -> [Text] -> m [AurInfo]
info m ps = unwrap m $ rpcI (Just "5") (Just "info") ps
search :: MonadIO m => Manager -> Text -> m [AurInfo]
search m p = unwrap m $ rpcS (Just "5") (Just "search") (Just p)
unwrap :: MonadIO m => Manager -> ClientM RPCResp -> m [AurInfo]
unwrap m r = liftIO . fmap (either (const []) _results) $ runClientM r (ClientEnv m url)