module Actions where import Data.Aeson import Data.Aeson.Types import Network.HTTP.Req import Request import Types import Prelude hiding (get) listReposUrl :: Source -> URL listReposUrl (Source Github user) = apiUrl Github /: "users" /~ user /: "repos" listReposUrl _ = error "not implemented" parseListRepos :: Source -> Value -> Either Error [Repo] parseListRepos src@(Source forge _) = (bimap ParseError (sourceRepo src <$>)) <$> parseEither parser where parser = case forge of Github -> withArray "Repos" (mapM (withObject "Repo" (.: "name")) . toList) _ -> error "not implemented" listRepos :: Source -> Action [Repo] listRepos src = do let url = listReposUrl src result <- get url pure (parseListRepos src =<< result) checkRepoExists :: Repo -> Request Bool checkRepoExists repo = do let url = repoUrl repo result <- get url pure (isRight result)