migrate-to-gitea/app/Actions.hs

35 lines
916 B
Haskell

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)