module Marvin.Adapter
( Event(..)
, RunWithAdapter, EventHandler, InitEventHandler, RunnerM
, IsAdapter(..)
, liftAdapterAction
) where
import Control.Monad.IO.Class
import Control.Monad.Logger
import qualified Data.Configurator.Types as C
import qualified Data.Text.Lazy as L
import Marvin.Internal.Types
data Event
= MessageEvent Message
| ChannelJoinEvent User Channel
| ChannelLeaveEvent User Channel
| TopicChangeEvent L.Text Channel
type EventHandler a = Event -> IO ()
type InitEventHandler a = a -> IO (EventHandler a)
type RunWithAdapter a = C.Config -> InitEventHandler a -> RunnerM ()
class IsAdapter a where
adapterId :: AdapterId a
messageChannel :: a -> Channel -> L.Text -> RunnerM ()
runWithAdapter :: RunWithAdapter a
getUsername :: a -> User -> RunnerM L.Text
getChannelName :: a -> Channel -> RunnerM L.Text
resolveChannel :: a -> L.Text -> RunnerM (Maybe Channel)
liftAdapterAction :: MonadIO m => RunnerM a -> m a
liftAdapterAction = liftIO . runStderrLoggingT