From 480073894bb67843abb76a1d51adad53468b73eb Mon Sep 17 00:00:00 2001 From: Stefan Risberg Date: Tue, 19 Dec 2023 00:21:43 +0100 Subject: [PATCH] Add bytestring and change log message type --- src/Effects/Log.hs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/src/Effects/Log.hs b/src/Effects/Log.hs index 63d01db..d8e9c88 100644 --- a/src/Effects/Log.hs +++ b/src/Effects/Log.hs @@ -18,6 +18,9 @@ import Data.Text qualified as T import Data.Text.IO qualified as T import Data.Text.Lazy qualified as LT import Data.Text.Lazy.Builder qualified as T +import Data.Text.Encoding qualified as T +import Data.Text.Lazy.Encoding qualified as LT +import Data.Text.Encoding.Error qualified as T import Effectful import Effectful.Concurrent.QSem import Effectful.Dispatch.Dynamic @@ -27,10 +30,12 @@ import Effects.Time import UnliftIO.Exception (bracket_) import UnliftIO.IO (stderr) import Prelude hiding (log) +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy as LB import Terminal -class Monoid a => LogData a where +class LogData a where toLog :: a -> T.Builder instance LogData T.Builder where @@ -39,11 +44,20 @@ instance LogData T.Builder where instance LogData Text where toLog = T.fromText +instance LogData LT.Text where + toLog = T.fromLazyText + instance LogData String where toLog = T.fromString +instance LogData B.ByteString where + toLog = toLog . T.decodeUtf8With T.lenientDecode + +instance LogData LB.ByteString where + toLog = toLog . LT.decodeUtf8With T.lenientDecode + data Log :: Effect where - Log :: Severity -> T.Builder -> Log m () + Log :: (LogData a) => Severity -> a -> Log m () makeEffect ''Log @@ -70,11 +84,10 @@ runLogWithQsem lock logger e = do lock' <- ask bracket_ (waitQSem lock') (signalQSem lock') $ do t <- currentTimeB - liftIO $ cmap (addTime t . fmtMessage) logger <& msg `WithSeverity` sev + liftIO $ cmap (addTime t . fmtMessage) logger <& toLog msg `WithSeverity` sev ) e - stderrLogger :: (MonadIO m) => LogAction m T.Builder