/
Log.purs
146 lines (114 loc) · 3.98 KB
/
Log.purs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
-- File auto generated by purescript-bridge! --
module Control.Monad.Freer.Extras.Log where
import Prelude
import Control.Lazy (defer)
import Data.Argonaut.Core (jsonNull)
import Data.Argonaut.Decode (class DecodeJson)
import Data.Argonaut.Decode.Aeson ((</$\>), (</*\>), (</\>))
import Data.Argonaut.Decode.Aeson as D
import Data.Argonaut.Encode (class EncodeJson, encodeJson)
import Data.Argonaut.Encode.Aeson ((>$<), (>/\<))
import Data.Argonaut.Encode.Aeson as E
import Data.Bounded.Generic (genericBottom, genericTop)
import Data.Enum (class Enum)
import Data.Enum.Generic (genericPred, genericSucc)
import Data.Generic.Rep (class Generic)
import Data.Lens (Iso', Lens', Prism', iso, prism')
import Data.Lens.Iso.Newtype (_Newtype)
import Data.Lens.Record (prop)
import Data.Map as Map
import Data.Maybe (Maybe(..))
import Data.Newtype (class Newtype, unwrap)
import Data.Show.Generic (genericShow)
import Data.Tuple.Nested ((/\))
import Type.Proxy (Proxy(Proxy))
newtype LogMessage a = LogMessage
{ _logLevel :: LogLevel
, _logMessageContent :: a
}
derive instance eqLogMessage :: (Eq a) => Eq (LogMessage a)
instance showLogMessage :: (Show a) => Show (LogMessage a) where
show a = genericShow a
instance encodeJsonLogMessage :: (EncodeJson a) => EncodeJson (LogMessage a) where
encodeJson = defer \_ -> E.encode $ unwrap >$<
( E.record
{ _logLevel: E.value :: _ LogLevel
, _logMessageContent: E.value :: _ a
}
)
instance decodeJsonLogMessage :: (DecodeJson a) => DecodeJson (LogMessage a) where
decodeJson = defer \_ -> D.decode $
( LogMessage <$> D.record "LogMessage"
{ _logLevel: D.value :: _ LogLevel
, _logMessageContent: D.value :: _ a
}
)
derive instance genericLogMessage :: Generic (LogMessage a) _
derive instance newtypeLogMessage :: Newtype (LogMessage a) _
--------------------------------------------------------------------------------
_LogMessage
:: forall a
. Iso' (LogMessage a) { _logLevel :: LogLevel, _logMessageContent :: a }
_LogMessage = _Newtype
logLevel :: forall a. Lens' (LogMessage a) LogLevel
logLevel = _Newtype <<< prop (Proxy :: _ "_logLevel")
logMessageContent :: forall a. Lens' (LogMessage a) a
logMessageContent = _Newtype <<< prop (Proxy :: _ "_logMessageContent")
--------------------------------------------------------------------------------
data LogLevel
= Debug
| Info
| Notice
| Warning
| Error
| Critical
| Alert
| Emergency
derive instance eqLogLevel :: Eq LogLevel
derive instance ordLogLevel :: Ord LogLevel
instance showLogLevel :: Show LogLevel where
show a = genericShow a
instance encodeJsonLogLevel :: EncodeJson LogLevel where
encodeJson = defer \_ -> E.encode E.enum
instance decodeJsonLogLevel :: DecodeJson LogLevel where
decodeJson = defer \_ -> D.decode D.enum
derive instance genericLogLevel :: Generic LogLevel _
instance enumLogLevel :: Enum LogLevel where
succ = genericSucc
pred = genericPred
instance boundedLogLevel :: Bounded LogLevel where
bottom = genericBottom
top = genericTop
--------------------------------------------------------------------------------
_Debug :: Prism' LogLevel Unit
_Debug = prism' (const Debug) case _ of
Debug -> Just unit
_ -> Nothing
_Info :: Prism' LogLevel Unit
_Info = prism' (const Info) case _ of
Info -> Just unit
_ -> Nothing
_Notice :: Prism' LogLevel Unit
_Notice = prism' (const Notice) case _ of
Notice -> Just unit
_ -> Nothing
_Warning :: Prism' LogLevel Unit
_Warning = prism' (const Warning) case _ of
Warning -> Just unit
_ -> Nothing
_Error :: Prism' LogLevel Unit
_Error = prism' (const Error) case _ of
Error -> Just unit
_ -> Nothing
_Critical :: Prism' LogLevel Unit
_Critical = prism' (const Critical) case _ of
Critical -> Just unit
_ -> Nothing
_Alert :: Prism' LogLevel Unit
_Alert = prism' (const Alert) case _ of
Alert -> Just unit
_ -> Nothing
_Emergency :: Prism' LogLevel Unit
_Emergency = prism' (const Emergency) case _ of
Emergency -> Just unit
_ -> Nothing