packages feed

datastar-hs-0.1.0.1: src/Hypermedia/Datastar/Logger.hs

module Hypermedia.Datastar.Logger
  ( DatastarLogger (..)
  , nullLogger
  , stderrLogger
  )
where

import Data.Text (Text)
import Data.Text qualified as T
import System.IO (hPutStrLn, stderr)

data DatastarLogger = DatastarLogger
  { logDebug :: Text -> IO ()
  , logInfo :: Text -> IO ()
  , logWarn :: Text -> IO ()
  , logError :: Text -> IO ()
  }

nullLogger :: DatastarLogger
nullLogger =
  DatastarLogger
    { logDebug = \_ -> pure ()
    , logInfo = \_ -> pure ()
    , logWarn = \_ -> pure ()
    , logError = \_ -> pure ()
    }

stderrLogger :: DatastarLogger
stderrLogger =
  DatastarLogger
    { logDebug = logAt "DEBUG"
    , logInfo = logAt "INFO"
    , logWarn = logAt "WARN"
    , logError = logAt "ERROR"
    }
 where
  logAt :: Text -> Text -> IO ()
  logAt level msg = hPutStrLn stderr $ T.unpack ("[datastar] [" <> level <> "] " <> msg)