From 31171561b2aaee48178408d0f194131e3c6ce66a Mon Sep 17 00:00:00 2001 From: Orion Kindel Date: Tue, 28 Nov 2023 10:56:12 -0600 Subject: [PATCH] feat: helper function to throw gitea error as js error --- src/Gitea.Error.purs | 7 +++++++ src/Gitea.Trans.purs | 8 +++++++- src/Gitea.Types.purs | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Gitea.Error.purs b/src/Gitea.Error.purs index cff9c4b..3537387 100644 --- a/src/Gitea.Error.purs +++ b/src/Gitea.Error.purs @@ -3,6 +3,9 @@ module Gitea.Error where import Prelude import Control.Monad.Error.Class (class MonadThrow, throwError) +import Data.Eq.Generic (genericEq) +import Data.Generic.Rep (class Generic) +import Data.Show.Generic (genericShow) import Effect.Aff.Class (class MonadAff) import HTTP.Response as HTTP import HTTP.Response as HTTP.Rep @@ -13,6 +16,10 @@ data Error | ENotFound | EValidation { message :: String, url :: String } +derive instance Generic Error _ +instance Eq Error where eq = genericEq +instance Show Error where show = genericShow + guardStatusOk :: forall m. MonadThrow Error m => MonadAff m => HTTP.Response -> m Unit guardStatusOk rep = do status <- HTTP.Rep.status rep diff --git a/src/Gitea.Trans.purs b/src/Gitea.Trans.purs index 47419f3..f57ed4d 100644 --- a/src/Gitea.Trans.purs +++ b/src/Gitea.Trans.purs @@ -2,12 +2,13 @@ module Gitea.Trans where import Prelude -import Control.Monad.Error.Class (class MonadError, class MonadThrow, throwError) +import Control.Monad.Error.Class (class MonadError, class MonadThrow, liftEither, throwError) import Control.Monad.Except (ExceptT, runExceptT) import Control.Monad.Morph (class MFunctor, class MMonad, embed, hoist) import Control.Monad.Reader (class MonadAsk, class MonadReader, ReaderT(..), ask, runReaderT) import Control.Monad.Rec.Class (class MonadRec) import Control.Monad.Trans.Class (class MonadTrans, lift) +import Data.Bifunctor (lmap) import Data.Either (Either) import Data.Newtype (class Newtype, unwrap, wrap) import Effect.Aff.Class (class MonadAff) @@ -49,3 +50,8 @@ derive newtype instance Monad m => Bind (GiteaT m) runGitea :: forall m a. Config -> GiteaT m a -> m (Either Gitea.Error.Error a) runGitea config m = runExceptT $ runReaderT (unwrap m) config + +runGiteaE :: forall m a. MonadThrow Effect.Exception.Error m => Config -> GiteaT m a -> m a +runGiteaE config m = do + e <- runGitea config m + liftEither $ lmap (Effect.Exception.error <<< show) e diff --git a/src/Gitea.Types.purs b/src/Gitea.Types.purs index c425531..1b11df2 100644 --- a/src/Gitea.Types.purs +++ b/src/Gitea.Types.purs @@ -294,7 +294,7 @@ type RepoSectionGiteaStatsImmutable r = type RepoMeta = { "id" :: RepoId - , "owner" :: String + , "owner" :: Username , "name" :: RepoName , "full_name" :: String }