{-# 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