{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
module Distribution.ArchHs.Aur
( Aur,
isInAur,
aurToIO,
)
where
import qualified Data.Text as T
import Distribution.ArchHs.Exception
import Distribution.ArchHs.Internal.Prelude
import Distribution.ArchHs.Name
import Distribution.ArchHs.Types
import Network.HTTP.Client (Manager)
import Web.ArchLinux
data Aur m a where
IsInAur :: HasMyName n => n -> Aur m Bool
makeSem_ ''Aur
isInAur :: (HasMyName n, Member Aur r) => n -> Sem r Bool
aurToIO :: Manager -> Members [WithMyErr, Embed IO] r => Sem (Aur ': r) a -> Sem r a
aurToIO :: forall (r :: EffectRow) a.
Manager
-> Members '[WithMyErr, Embed IO] r => Sem (Aur : r) a -> Sem r a
aurToIO Manager
manager = forall (e :: Effect) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret forall a b. (a -> b) -> a -> b
$ \case
(IsInAur n
name) -> do
Either ClientError (AurResponse [AurSearch])
result <- forall (m :: * -> *) (r :: EffectRow) a.
Member (Embed m) r =>
m a -> Sem r a
embed forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (s :: APIType) a.
HasBaseUrl s =>
Manager -> APIClient s a -> IO (Either ClientError a)
runAPIClient Manager
manager forall b c a. (b -> c) -> (a -> b) -> a -> c
. AurSearchType -> Text -> APIClient 'Aur (AurResponse [AurSearch])
searchAur AurSearchType
ByName forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Text
T.pack forall a b. (a -> b) -> a -> b
$ ArchLinuxName -> String
unArchLinuxName forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall n. HasMyName n => n -> ArchLinuxName
toArchLinuxName forall a b. (a -> b) -> a -> b
$ n
name
case Either ClientError (AurResponse [AurSearch])
result of
Left ClientError
err -> forall e (r :: EffectRow) a. Member (Error e) r => e -> Sem r a
throw forall a b. (a -> b) -> a -> b
$ ClientError -> MyException
NetworkException ClientError
err
Right AurResponse {$sel:_results:AurResponse :: forall a. AurResponse a -> a
_results = [AurSearch
_]} -> forall (m :: * -> *) a. Monad m => a -> m a
return Bool
True
Either ClientError (AurResponse [AurSearch])
_ -> forall (m :: * -> *) a. Monad m => a -> m a
return Bool
False