{-# LANGUAGE RankNTypes #-}
module Di.Df1
( Df1
, push
, attr
, debug
, info
, notice
, warning
, error
, alert
, critical
, emergency
, debug'
, info'
, notice'
, warning'
, error'
, alert'
, critical'
, emergency'
, debugSTM
, infoSTM
, noticeSTM
, warningSTM
, errorSTM
, alertSTM
, criticalSTM
, emergencySTM
, df1
, fromDiLog
, fromDf1Log
, Df1.Level
, Df1.Path
, Df1.Segment
, Df1.ToSegment(segment)
, Df1.Key
, Df1.ToKey(key)
, Df1.Value
, Df1.ToValue(value)
, Df1.Message
, Df1.ToMessage(message)
) where
import Control.Concurrent.STM (STM)
import Control.Monad.IO.Class (MonadIO)
import Prelude hiding (error)
import Unsafe.Coerce (unsafeCoerce)
import qualified Di.Core as Di (Di, Log(Log), log, log', push)
import qualified Di.Handle as Di (LineRenderer(LineRendererUtf8))
import qualified Df1
type Df1 = Di.Di Df1.Level Df1.Path Df1.Message
push
:: Df1.Segment
-> Di.Di level Df1.Path msg
-> Di.Di level Df1.Path msg
push s = Di.push (Df1.Push s)
{-# INLINE push #-}
attr
:: Df1.ToValue value
=> Df1.Key
-> value
-> Di.Di level Df1.Path msg
-> Di.Di level Df1.Path msg
attr k v = Di.push (Df1.Attr k (Df1.value v))
{-# INLINE attr #-}
emergency
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
emergency di = emergency' di . Df1.message
{-# INLINE emergency #-}
alert
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
alert di = alert' di . Df1.message
{-# INLINE alert #-}
critical
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
critical di = critical' di . Df1.message
{-# INLINE critical #-}
error
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
error di = error' di . Df1.message
{-# INLINE error #-}
warning
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
warning di = warning' di . Df1.message
{-# INLINE warning #-}
notice
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
notice di = notice' di . Df1.message
{-# INLINE notice #-}
info
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
info di = info' di . Df1.message
{-# INLINE info #-}
debug
:: (MonadIO m, Df1.ToMessage msg)
=> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
debug di = debug' di . Df1.message
{-# INLINE debug #-}
emergency'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
emergency' di = Di.log di Df1.Emergency
{-# INLINE emergency' #-}
critical'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
critical' di = Di.log di Df1.Critical
{-# INLINE critical' #-}
alert'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
alert' di = Di.log di Df1.Alert
{-# INLINE alert' #-}
error'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
error' di = Di.log di Df1.Error
{-# INLINE error' #-}
warning'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
warning' di = Di.log di Df1.Warning
{-# INLINE warning' #-}
notice'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
notice' di = Di.log di Df1.Notice
{-# INLINE notice' #-}
info'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
info' di = Di.log di Df1.Info
{-# INLINE info' #-}
debug'
:: MonadIO m
=> Di.Di Df1.Level path Df1.Message
-> Df1.Message
-> m ()
debug' di = Di.log di Df1.Debug
{-# INLINE debug' #-}
emergencySTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
emergencySTM natSTM di = Di.log' natSTM di Df1.Emergency . Df1.message
{-# INLINE emergencySTM #-}
criticalSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
criticalSTM natSTM di = Di.log' natSTM di Df1.Critical . Df1.message
{-# INLINE criticalSTM #-}
alertSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
alertSTM natSTM di = Di.log' natSTM di Df1.Alert . Df1.message
{-# INLINE alertSTM #-}
errorSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
errorSTM natSTM di = Di.log' natSTM di Df1.Error . Df1.message
{-# INLINE errorSTM #-}
warningSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
warningSTM natSTM di = Di.log' natSTM di Df1.Warning . Df1.message
{-# INLINE warningSTM #-}
noticeSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
noticeSTM natSTM di = Di.log' natSTM di Df1.Notice . Df1.message
{-# INLINE noticeSTM #-}
infoSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
infoSTM natSTM di = Di.log' natSTM di Df1.Info . Df1.message
{-# INLINE infoSTM #-}
debugSTM
:: (Monad m, Df1.ToMessage msg)
=> (forall x. STM x -> m x)
-> Di.Di Df1.Level path Df1.Message
-> msg
-> m ()
debugSTM natSTM di = Di.log' natSTM di Df1.Debug . Df1.message
{-# INLINE debugSTM #-}
df1 :: Di.LineRenderer Df1.Level Df1.Path Df1.Message
{-# INLINE df1 #-}
df1 = Di.LineRendererUtf8 (\x ->
if x then Df1.renderColor . fromDiLog
else Df1.render . fromDiLog)
fromDiLog :: Di.Log Df1.Level Df1.Path Df1.Message -> Df1.Log
{-# INLINE fromDiLog #-}
fromDiLog = unsafeCoerce
_fromDiLog :: Di.Log Df1.Level Df1.Path Df1.Message -> Df1.Log
_fromDiLog (Di.Log a b c d) = Df1.Log a b c d
fromDf1Log :: Df1.Log -> Di.Log Df1.Level Df1.Path Df1.Message
{-# INLINE fromDf1Log #-}
fromDf1Log = unsafeCoerce
_fromDf1Log :: Df1.Log -> Di.Log Df1.Level Df1.Path Df1.Message
_fromDf1Log (Df1.Log a b c d) = Di.Log a b c d