5 | module Log4Types.Core.Loggable
8 | import Log4Types.Core.Value
9 | import Log4Types.Core.Renderer
22 | interface Loggable a where
24 | logFields : LogRenderer r -> a -> r -> r
27 | logShow : a -> String
39 | data LoggedValue : Type where
40 | MkLoggedValue : Loggable a => (val : a) -> LoggedValue
44 | loggedValueFields : LogRenderer r -> LoggedValue -> r -> r
45 | loggedValueFields renderer (MkLoggedValue val) = logFields renderer val
49 | loggedValueShow : LoggedValue -> String
50 | loggedValueShow (MkLoggedValue val) = logShow val
53 | Show LoggedValue where
54 | show = loggedValueShow
61 | Loggable String where
62 | logFields renderer s acc = renderer.addField "value" (StrVal s) acc
67 | logFields renderer i acc = renderer.addField "value" (IntVal $
cast i) acc
71 | Loggable Integer where
72 | logFields renderer i acc = renderer.addField "value" (IntVal i) acc
77 | logFields renderer n acc = renderer.addField "value" (IntVal $
cast n) acc
81 | Loggable Double where
82 | logFields renderer d acc = renderer.addField "value" (FloatVal d) acc
87 | logFields renderer b acc = renderer.addField "value" (BoolVal b) acc
91 | Loggable a => Loggable (Maybe a) where
92 | logFields renderer Nothing acc = acc
93 | logFields renderer (Just x) acc = logFields renderer x acc
94 | logShow Nothing = "Nothing"
95 | logShow (Just x) = logShow x
98 | Loggable a => Loggable (List a) where
99 | logFields renderer xs acc = foldl (\a, x => logFields renderer x a) acc xs
100 | logShow xs = "[" ++ concat (intersperse ", " (map logShow xs)) ++ "]"
103 | Loggable LogParamValue where
104 | logFields renderer v acc = renderer.addField "value" v acc