feat: helper function to throw gitea error as js error

This commit is contained in:
orion 2023-11-28 10:56:12 -06:00
parent e13d2f3b8e
commit 31171561b2
Signed by: orion
GPG Key ID: 6D4165AE4C928719
3 changed files with 15 additions and 2 deletions

View File

@ -3,6 +3,9 @@ module Gitea.Error where
import Prelude import Prelude
import Control.Monad.Error.Class (class MonadThrow, throwError) 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 Effect.Aff.Class (class MonadAff)
import HTTP.Response as HTTP import HTTP.Response as HTTP
import HTTP.Response as HTTP.Rep import HTTP.Response as HTTP.Rep
@ -13,6 +16,10 @@ data Error
| ENotFound | ENotFound
| EValidation { message :: String, url :: String } | 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 :: forall m. MonadThrow Error m => MonadAff m => HTTP.Response -> m Unit
guardStatusOk rep = do guardStatusOk rep = do
status <- HTTP.Rep.status rep status <- HTTP.Rep.status rep

View File

@ -2,12 +2,13 @@ module Gitea.Trans where
import Prelude 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.Except (ExceptT, runExceptT)
import Control.Monad.Morph (class MFunctor, class MMonad, embed, hoist) import Control.Monad.Morph (class MFunctor, class MMonad, embed, hoist)
import Control.Monad.Reader (class MonadAsk, class MonadReader, ReaderT(..), ask, runReaderT) import Control.Monad.Reader (class MonadAsk, class MonadReader, ReaderT(..), ask, runReaderT)
import Control.Monad.Rec.Class (class MonadRec) import Control.Monad.Rec.Class (class MonadRec)
import Control.Monad.Trans.Class (class MonadTrans, lift) import Control.Monad.Trans.Class (class MonadTrans, lift)
import Data.Bifunctor (lmap)
import Data.Either (Either) import Data.Either (Either)
import Data.Newtype (class Newtype, unwrap, wrap) import Data.Newtype (class Newtype, unwrap, wrap)
import Effect.Aff.Class (class MonadAff) 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 :: forall m a. Config -> GiteaT m a -> m (Either Gitea.Error.Error a)
runGitea config m = runExceptT $ runReaderT (unwrap m) config 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

View File

@ -294,7 +294,7 @@ type RepoSectionGiteaStatsImmutable r =
type RepoMeta = type RepoMeta =
{ "id" :: RepoId { "id" :: RepoId
, "owner" :: String , "owner" :: Username
, "name" :: RepoName , "name" :: RepoName
, "full_name" :: String , "full_name" :: String
} }