{-# LANGUAGE TypeFamilies #-} module Arbiter.Core.MonadArbiter ( MonadArbiter (..) , Params , SomeParam (..) , ParamType (..) , JobHandler , BatchedJobHandler ) where import Control.Monad.IO.Class (MonadIO) import Data.Int (Int64) import Data.Kind (Type) import Data.List.NonEmpty (NonEmpty) import Data.Text (Text) import Arbiter.Core.Codec (ParamType (..), Params, RowCodec, SomeParam (..)) import Arbiter.Core.Job.Types (JobRead) class (Monad m, MonadIO m) => MonadArbiter m where type Handler m jobs result :: Type executeQuery :: Text -> Params -> RowCodec a -> m [a] executeStatement :: Text -> Params -> m Int64 withDbTransaction :: m a -> m a runHandlerWithConnection :: Handler m jobs result -> jobs -> m result type JobHandler m payload result = Handler m (JobRead payload) result type BatchedJobHandler m payload result = Handler m (NonEmpty (JobRead payload)) result