{-# LANGUAGE OverloadedStrings, TypeSynonymInstances, FlexibleInstances, ExistentialQuantification, TypeFamilies, GeneralizedNewtypeDeriving, StandaloneDeriving, MultiParamTypeClasses, UndecidableInstances, ScopedTypeVariables, FlexibleContexts #-}

-- | This module contains some shortcut functions that can be of use in simple usage cases.
module System.Log.Heavy.Shortcuts
  (
    -- * Log a message
    reportError, warning, info, debug,
    -- * Creating a message
    errorMessage, warnMessage, infoMessage, debugMessage
  ) where

import Control.Monad.Trans
import qualified Data.Text.Lazy as TL
import qualified Data.Text.Format.Heavy as F

import System.Log.Heavy.Types
import System.Log.Heavy.Level
import System.Log.Heavy.Util

-- | Message stub with Info severity.
infoMessage :: F.ClosedVarContainer vars => TL.Text -> vars -> LogMessage
infoMessage :: Text -> vars -> LogMessage
infoMessage Text
fmt vars
vars = Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
forall vars.
ClosedVarContainer vars =>
Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
LogMessage Level
info_level [] Loc
forall a. HasCallStack => a
undefined Text
fmt vars
vars []

-- | Message stub with Debug severity.
debugMessage :: F.ClosedVarContainer vars => TL.Text -> vars -> LogMessage
debugMessage :: Text -> vars -> LogMessage
debugMessage Text
fmt vars
vars = Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
forall vars.
ClosedVarContainer vars =>
Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
LogMessage Level
debug_level [] Loc
forall a. HasCallStack => a
undefined Text
fmt vars
vars []

-- | Message stub with Error severity.
errorMessage :: F.ClosedVarContainer vars => TL.Text -> vars -> LogMessage
errorMessage :: Text -> vars -> LogMessage
errorMessage Text
fmt vars
vars = Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
forall vars.
ClosedVarContainer vars =>
Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
LogMessage Level
error_level [] Loc
forall a. HasCallStack => a
undefined Text
fmt vars
vars []

-- | Message stub with Warning severity.
warnMessage :: F.ClosedVarContainer vars => TL.Text -> vars -> LogMessage
warnMessage :: Text -> vars -> LogMessage
warnMessage Text
fmt vars
vars = Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
forall vars.
ClosedVarContainer vars =>
Level
-> LogSource -> Loc -> Text -> vars -> LogContext -> LogMessage
LogMessage Level
warn_level [] Loc
forall a. HasCallStack => a
undefined Text
fmt vars
vars []

-- | Log debug message.
-- Note: this message will not contain source information.
debug :: forall m vars. (F.ClosedVarContainer vars, MonadIO m, HasLogging m) => TL.Text -> vars -> m ()
debug :: Text -> vars -> m ()
debug Text
fmt vars
vars = LogMessage -> m ()
forall (m :: * -> *).
(HasLogging m, MonadIO m) =>
LogMessage -> m ()
logMessage (LogMessage -> m ()) -> LogMessage -> m ()
forall a b. (a -> b) -> a -> b
$ Text -> vars -> LogMessage
forall vars. ClosedVarContainer vars => Text -> vars -> LogMessage
debugMessage Text
fmt vars
vars

-- | Log info message.
-- Note: this message will not contain source information.
info :: forall m vars. (F.ClosedVarContainer vars, MonadIO m, HasLogging m) => TL.Text -> vars -> m ()
info :: Text -> vars -> m ()
info Text
fmt vars
vars = LogMessage -> m ()
forall (m :: * -> *).
(HasLogging m, MonadIO m) =>
LogMessage -> m ()
logMessage (LogMessage -> m ()) -> LogMessage -> m ()
forall a b. (a -> b) -> a -> b
$ Text -> vars -> LogMessage
forall vars. ClosedVarContainer vars => Text -> vars -> LogMessage
infoMessage Text
fmt vars
vars

-- | Log error message.
-- Note: this message will not contain source information.
reportError :: forall m vars. (F.ClosedVarContainer vars, MonadIO m, HasLogging m) => TL.Text -> vars -> m ()
reportError :: Text -> vars -> m ()
reportError Text
fmt vars
vars = LogMessage -> m ()
forall (m :: * -> *).
(HasLogging m, MonadIO m) =>
LogMessage -> m ()
logMessage (LogMessage -> m ()) -> LogMessage -> m ()
forall a b. (a -> b) -> a -> b
$ Text -> vars -> LogMessage
forall vars. ClosedVarContainer vars => Text -> vars -> LogMessage
errorMessage Text
fmt vars
vars

-- | Log warning message.
-- Note: this message will not contain source information.
warning :: forall m vars. (F.ClosedVarContainer vars, MonadIO m, HasLogging m) => TL.Text -> vars -> m ()
warning :: Text -> vars -> m ()
warning Text
fmt vars
vars = LogMessage -> m ()
forall (m :: * -> *).
(HasLogging m, MonadIO m) =>
LogMessage -> m ()
logMessage (LogMessage -> m ()) -> LogMessage -> m ()
forall a b. (a -> b) -> a -> b
$ Text -> vars -> LogMessage
forall vars. ClosedVarContainer vars => Text -> vars -> LogMessage
warnMessage Text
fmt vars
vars