{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}

module Network.Monitoring.Riemann.LoggingClient where

import Control.Monad.IO.Class (MonadIO, liftIO)
import Network.Monitoring.Riemann.Client (Client, close, sendEvent)

data LoggingClient =
  LoggingClient

{-|
    A new LoggingClient

    The LoggingClient is a 'Client' that will simply print events
-}
loggingClient :: LoggingClient
loggingClient :: LoggingClient
loggingClient = LoggingClient
LoggingClient

instance MonadIO m => Client m LoggingClient where
  sendEvent :: LoggingClient -> Event -> m ()
sendEvent LoggingClient
_ = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> (Event -> IO ()) -> Event -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Event -> IO ()
forall a. Show a => a -> IO ()
print
  close :: LoggingClient -> m ()
close LoggingClient
_ = IO () -> m ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ()) -> IO () -> m ()
forall a b. (a -> b) -> a -> b
$ [Char] -> IO ()
forall a. Show a => a -> IO ()
print [Char]
"close"