1
1
module Network.Bugsnag.BeforeNotify
2
- ( BeforeNotify
3
- , beforeNotify
4
- , runBeforeNotify
2
+ ( BeforeNotify
3
+ , beforeNotify
4
+ , runBeforeNotify
5
5
6
6
-- * Modifying the underlying Exceptions
7
- , updateExceptions
8
- , filterExceptions
9
- , updateStackFrames
10
- , filterStackFrames
11
- , setStackFramesCode
12
- , setStackFramesInProject
13
- , setStackFramesInProjectByFile
14
- , setStackFramesInProjectBy
7
+ , updateExceptions
8
+ , filterExceptions
9
+ , updateStackFrames
10
+ , filterStackFrames
11
+ , setStackFramesCode
12
+ , setStackFramesInProject
13
+ , setStackFramesInProjectByFile
14
+ , setStackFramesInProjectBy
15
15
16
16
-- * Modifying the Event
17
- , updateEvent
18
- , updateEventFromOriginalException
19
- , setGroupingHash
20
- , setGroupingHashBy
21
- , setDevice
22
- , setContext
23
- , setRequest
24
- , setWarningSeverity
25
- , setErrorSeverity
26
- , setInfoSeverity
27
- ) where
17
+ , updateEvent
18
+ , updateEventFromOriginalException
19
+ , setGroupingHash
20
+ , setGroupingHashBy
21
+ , setDevice
22
+ , setContext
23
+ , setRequest
24
+ , setWarningSeverity
25
+ , setErrorSeverity
26
+ , setInfoSeverity
27
+ ) where
28
28
29
29
import Prelude
30
30
@@ -45,57 +45,56 @@ import Network.Bugsnag.StackFrame
45
45
-- 'BeforeNotify' implements 'Semigroup' and 'Monoid', which means the /do
46
46
-- nothing/ 'BeforeNotify' is 'mempty' and two 'BeforeNotify's @doThis@ then
47
47
-- @doThat@ can be implemented as @doThat <> doThis@.
48
- --
49
48
newtype BeforeNotify = BeforeNotify
50
- { _unBeforeNotify :: forall e . Exception. Exception e => e -> Event -> Event
51
- }
49
+ { _unBeforeNotify :: forall e . Exception. Exception e => e -> Event -> Event
50
+ }
52
51
53
52
instance Semigroup BeforeNotify where
54
- BeforeNotify f <> BeforeNotify g = BeforeNotify $ \ e -> f e . g e
53
+ BeforeNotify f <> BeforeNotify g = BeforeNotify $ \ e -> f e . g e
55
54
56
55
instance Monoid BeforeNotify where
57
- mempty = BeforeNotify $ const id
56
+ mempty = BeforeNotify $ const id
58
57
59
58
beforeNotify
60
- :: (forall e . Exception. Exception e => e -> Event -> Event )
61
- -> BeforeNotify
59
+ :: (forall e . Exception. Exception e => e -> Event -> Event )
60
+ -> BeforeNotify
62
61
beforeNotify = BeforeNotify
63
62
64
63
runBeforeNotify :: Exception. Exception e => BeforeNotify -> e -> Event -> Event
65
64
runBeforeNotify (BeforeNotify f) = f
66
65
67
66
updateExceptions :: (Exception -> Exception ) -> BeforeNotify
68
- updateExceptions f = updateEvent
69
- $ \ event -> event { event_exceptions = map f $ event_exceptions event }
67
+ updateExceptions f = updateEvent $
68
+ \ event -> event {event_exceptions = map f $ event_exceptions event}
70
69
71
70
filterExceptions :: (Exception -> Bool ) -> BeforeNotify
72
71
filterExceptions p = updateEvent $ \ event ->
73
- event { event_exceptions = filter p $ event_exceptions event }
72
+ event {event_exceptions = filter p $ event_exceptions event}
74
73
75
74
updateStackFrames :: (StackFrame -> StackFrame ) -> BeforeNotify
76
- updateStackFrames f = updateExceptions
77
- $ \ e -> e { exception_stacktrace = map f $ exception_stacktrace e }
75
+ updateStackFrames f = updateExceptions $
76
+ \ e -> e {exception_stacktrace = map f $ exception_stacktrace e}
78
77
79
78
filterStackFrames :: (StackFrame -> Bool ) -> BeforeNotify
80
- filterStackFrames p = updateExceptions
81
- $ \ e -> e { exception_stacktrace = filter p $ exception_stacktrace e }
79
+ filterStackFrames p = updateExceptions $
80
+ \ e -> e {exception_stacktrace = filter p $ exception_stacktrace e}
82
81
83
82
setStackFramesCode :: CodeIndex -> BeforeNotify
84
83
setStackFramesCode =
85
- (setStackFramesInProjectBy (isJust . stackFrame_code) <> )
86
- . updateStackFrames
87
- . attachBugsnagCode
84
+ (setStackFramesInProjectBy (isJust . stackFrame_code) <> )
85
+ . updateStackFrames
86
+ . attachBugsnagCode
88
87
89
88
setStackFramesInProject :: Bool -> BeforeNotify
90
89
setStackFramesInProject = setStackFramesInProjectBy . const
91
90
92
91
setStackFramesInProjectByFile :: (FilePath -> Bool ) -> BeforeNotify
93
92
setStackFramesInProjectByFile f =
94
- setStackFramesInProjectBy $ f . unpack . stackFrame_file
93
+ setStackFramesInProjectBy $ f . unpack . stackFrame_file
95
94
96
95
setStackFramesInProjectBy :: (StackFrame -> Bool ) -> BeforeNotify
97
96
setStackFramesInProjectBy f =
98
- updateStackFrames $ \ sf -> sf { stackFrame_inProject = Just $ f sf }
97
+ updateStackFrames $ \ sf -> sf {stackFrame_inProject = Just $ f sf}
99
98
100
99
updateEvent :: (Event -> Event ) -> BeforeNotify
101
100
updateEvent f = beforeNotify $ \ _e event -> f event
@@ -125,39 +124,39 @@ updateEvent f = beforeNotify $ \_e event -> f event
125
124
-- If the cast fails, the event is unchanged.
126
125
--
127
126
-- The cast will match either @e@ or @'AnnotatedException' e@.
128
- --
129
127
updateEventFromOriginalException
130
- :: forall e . Exception. Exception e => (e -> BeforeNotify ) -> BeforeNotify
128
+ :: forall e . Exception. Exception e => (e -> BeforeNotify ) -> BeforeNotify
131
129
updateEventFromOriginalException f = beforeNotify $ \ e event ->
132
- let bn = maybe mempty (f . Annotated. exception) $ Exception. fromException $ Exception. toException e
133
- in runBeforeNotify bn e event
130
+ let bn =
131
+ maybe mempty (f . Annotated. exception) $
132
+ Exception. fromException $
133
+ Exception. toException e
134
+ in runBeforeNotify bn e event
134
135
135
136
setGroupingHash :: Text -> BeforeNotify
136
137
setGroupingHash hash = setGroupingHashBy $ const $ Just hash
137
138
138
139
setGroupingHashBy :: (Event -> Maybe Text ) -> BeforeNotify
139
140
setGroupingHashBy f =
140
- updateEvent $ \ event -> event { event_groupingHash = f event }
141
+ updateEvent $ \ event -> event {event_groupingHash = f event}
141
142
142
143
-- | Set the Event's Context
143
144
setContext :: Text -> BeforeNotify
144
145
setContext context =
145
- updateEvent $ \ event -> event { event_context = Just context }
146
+ updateEvent $ \ event -> event {event_context = Just context}
146
147
147
148
-- | Set the Event's Request
148
149
--
149
150
-- See 'bugsnagRequestFromWaiRequest'
150
- --
151
151
setRequest :: Request -> BeforeNotify
152
152
setRequest request =
153
- updateEvent $ \ event -> event { event_request = Just request }
153
+ updateEvent $ \ event -> event {event_request = Just request}
154
154
155
155
-- | Set the Event's Device
156
156
--
157
157
-- See 'bugsnagDeviceFromWaiRequest'
158
- --
159
158
setDevice :: Device -> BeforeNotify
160
- setDevice device = updateEvent $ \ event -> event { event_device = Just device }
159
+ setDevice device = updateEvent $ \ event -> event {event_device = Just device}
161
160
162
161
-- | Set to 'ErrorSeverity'
163
162
setErrorSeverity :: BeforeNotify
@@ -173,4 +172,4 @@ setInfoSeverity = setSeverity infoSeverity
173
172
174
173
setSeverity :: Severity -> BeforeNotify
175
174
setSeverity severity =
176
- updateEvent $ \ event -> event { event_severity = Just severity }
175
+ updateEvent $ \ event -> event {event_severity = Just severity}
0 commit comments