never executed always true always false
1 module HelVM.HelMA.Automaton.Eff.MockLogger (
2 filterLogsWithLevelInfo,
3 filterLogsWithLevelDebug,
4 filterLogsWithLevel,
5 mockLog,
6
7 MonadMockLogger,
8 MockLoggerData,
9 MockLog (..),
10 ) where
11
12 import HelVM.HelMA.Automaton.API.IOTypes
13 import qualified HelVM.HelMA.Automaton.API.LogLevel as LogLevel
14
15 import Control.Monad.Logger
16 import Control.Monad.Writer.Class (MonadWriter, tell)
17
18 import Data.MonoTraversable
19
20 import qualified Data.Sequence as Seq
21
22 filterLogsWithLevelInfo :: MockLoggerData -> Output
23 filterLogsWithLevelInfo = filterLogsWithLevel LevelInfo
24
25 filterLogsWithLevelDebug :: MockLoggerData -> Output
26 filterLogsWithLevelDebug = filterLogsWithLevel LevelDebug
27
28 filterLogsWithLevel :: LogLevel -> MockLoggerData -> Output
29 filterLogsWithLevel t logsSeq = oconcat (line <$> Seq.filter condition logsSeq) where
30 condition l = t <= logLevel l
31 line l = (LogLevel.showEitherTextLogLevel . LogLevel.fromLogger . logLevel) l <> " " <> (decodeUtf8 . fromLogStr . logStr) l <> "\n"
32
33 mockLog :: MonadMockLogger m => MockLog -> m ()
34 mockLog = tell . one
35
36 ----
37
38 type MonadMockLogger m = MonadWriter MockLoggerData m
39
40 type MockLoggerData = Seq MockLog
41
42 data MockLog = MockLog
43 { logLoc :: !Loc
44 , logSource :: !LogSource
45 , logLevel :: !LogLevel
46 , logStr :: !LogStr
47 }
48 deriving stock (Eq, Show)