packages feed

unclogging-0.1.0.0: src/Control/Effect/Unclog/Text.hs

{-# LANGUAGE TemplateHaskell #-}

-- | the @fused-effects@ + 'Text' frontend
module Control.Effect.Unclog.Text where

import Control.Effect.Unclog (publishLogEntry)
import Data.Text.Encoding qualified as T
import Language.Haskell.TH.Syntax (Exp, Q, unTypeCode)
import Unclog.Common (LogLevel (..))
import Unclog.Frontend (mkLogEntry)

logText :: LogLevel -> Q Exp
logText lvl =
  [|
    \t -> do
      let entry ts = $(unTypeCode $ mkLogEntry lvl) ts (T.encodeUtf8 t)
      publishLogEntry entry
    |]

debug :: Q Exp
debug = logText Debug

info :: Q Exp
info = logText Info

warn :: Q Exp
warn = logText Warn

fatal :: Q Exp
fatal = logText Fatal