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