packages feed

eventuo11y-json 0.2.0.0 → 0.3.0.0

raw patch · 3 files changed

+26/−22 lines, 3 filesdep ~eventuo11yPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: eventuo11y

API changes (from Hackage documentation)

- Observe.Event.Render.JSON.Handle: newJSONEvent :: Exception stex => (Object -> IO ()) -> RenderExJSON stex -> RenderFieldJSON f -> IO (Event IO JSONRef f)
+ Observe.Event.Render.JSON.Handle: newJSONEvent :: Exception stex => (Object -> IO ()) -> RenderExJSON stex -> RenderFieldJSON f -> Maybe JSONRef -> [JSONRef] -> [f] -> IO (Event IO JSONRef f)

Files

CHANGELOG.md view
@@ -1,5 +1,9 @@ # Revision history for eventuo11y-json +## 0.3.0.0 -- 2023-01-13++- Update for eventuo11y 0.7+ ## 0.2.0.0 -- 2022-12-23  - Update for eventuo11y 0.6
eventuo11y-json.cabal view
@@ -1,6 +1,6 @@ cabal-version:      3.0 name:               eventuo11y-json-version:            0.2.0.0+version:            0.3.0.0 synopsis:           aeson-based rendering for eventuo11y description:   Render [eventuo11y](https://hackage.haskell.org/package/eventuo11y) 'Observe.Event.Event's@@ -42,7 +42,7 @@     , base              ^>= { 4.14, 4.16, 4.17 }     , aeson             ^>= { 2.0, 2.1 }     , bytestring        ^>= { 0.10, 0.11 }-    , eventuo11y        ^>= 0.6+    , eventuo11y        ^>= { 0.7 }     , eventuo11y-dsl    ^>= 0.2     , template-haskell  ^>= { 2.16, 2.18, 2.19 }     , text              ^>= { 1.2, 2.0 }
src/Observe/Event/Render/JSON/Handle.hs view
@@ -4,6 +4,7 @@ {-# LANGUAGE LambdaCase #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RankNTypes #-}+{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeApplications #-}  -- |@@ -24,7 +25,7 @@ import Control.Concurrent.MVar import Control.Exception import Data.Aeson-import Data.Aeson.KeyMap (insert)+import Data.Aeson.KeyMap (fromList, insert) import Data.ByteString.Lazy.Char8 (hPutStrLn) import Data.Coerce import Data.IORef@@ -49,13 +50,17 @@   (Object -> IO ()) ->   RenderExJSON stex ->   RenderFieldJSON f ->+  -- | Parent+  Maybe JSONRef ->+  -- | Causes+  [JSONRef] ->+  -- | Initial fields+  [f] ->   IO (Event IO JSONRef f)-newJSONEvent emit renderEx renderField = do+newJSONEvent emit renderEx renderField parent causes initialFields = do   eventRef <- coerce nextRandom   start <- getCurrentTime-  fieldsRef <- newIORef mempty-  parentsRef <- newIORef mempty-  proximatesRef <- newIORef mempty+  fieldsRef <- newIORef . fromList $ map renderField initialFields   finishOnce <- newEmptyMVar   let finish r =         tryPutMVar finishOnce () >>= \case@@ -63,16 +68,14 @@           True -> do             end <- getCurrentTime             fields <- readIORef fieldsRef-            parents <- readIORef parentsRef-            proximates <- readIORef proximatesRef             emit               ( "event-id" .= eventRef                   <> "start" .= start                   <> "end" .= end                   <> "duration" .= diffUTCTime end start                   <> ifNotNull "fields" fields-                  <> ifNotNull "parents" parents-                  <> ifNotNull "proximate-causes" proximates+                  <> ifNotNull "parent" parent+                  <> ifNotNull "proximate-causes" causes                   <> case r of                     StructuredFail e -> "structured-exception" .= renderEx e                     UnstructuredFail e -> "unstructured-exception" .= show e@@ -84,11 +87,6 @@         addField = \field ->           atomicModifyIORef' fieldsRef \fields ->             (uncurry insert (renderField field) fields, ()),-        addReference = \(Reference ty r) ->-          let refsRef = case ty of-                Parent -> parentsRef-                Proximate -> proximatesRef-           in atomicModifyIORef' refsRef \refs -> (r : refs, ()),         finalize = \me -> finish $ case me of           Just e -> case fromException e of             Just se -> StructuredFail se@@ -119,12 +117,14 @@   let emit :: Object -> IO ()       emit o = withMVar outputLock \() ->         hPutStrLn h $ encode o-  pure $-    EventBackend-      { newEvent = \sel -> do-          let (k, renderField) = renderSel sel-          newJSONEvent (emit . (k .=)) renderEx renderField-      }+      eb =+        EventBackend+          { newEvent = \(NewEventArgs {..}) -> do+              let (k, renderField) = renderSel newEventSelector+              newJSONEvent (emit . (k .=)) renderEx renderField newEventParent newEventCauses newEventInitialFields,+            emitImmediateEvent = fmap reference . newEvent eb+          }+  pure eb  -- | An 'EventBackend' which posts events to @stderr@ as JSON. --