-- | Logging utilities for 'Conduit's.
module Data.MediaBus.Conduit.Logging
  ( prefixLogsC
  ) where

import Control.Monad.Logger
import Data.Conduit
import Data.Monoid

-- | Prefix all log messages of the given 'Conduit' with a 'Text'.
-- This is similar to 'Data.MediaBus.Basisc.LoggingExtra.withLogMessagePrefix'.
prefixLogsC
  :: (ToLogStr prefix, MonadLoggerIO m)
  => prefix -> ConduitM i o (LoggingT m) r -> ConduitM i o m r
prefixLogsC prefix nested = do
  originalLogger <- askLoggerIO
  transPipe (`runLoggingT` wrapLogger originalLogger) nested
  where
    wrapLogger originalLogger loc src lvl msg =
      originalLogger loc src lvl (toLogStr prefix <> msg)