packages feed

eventsource-api 1.0.0 → 1.0.1

raw patch · 3 files changed

+81/−2 lines, 3 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

+ EventSource.Store: ForEventDecodeFailure :: Text -> ForEventFailure
+ EventSource.Store: ForEventReadFailure :: ReadFailure -> ForEventFailure
+ EventSource.Store: data ForEventFailure
+ EventSource.Store: foldSavedEvents :: (MonadIO m, Store store) => store -> StreamName -> (s -> SavedEvent -> s) -> s -> ExceptT ForEventFailure m s
+ EventSource.Store: foldSavedEventsM :: (MonadIO m, Store store) => store -> StreamName -> (s -> SavedEvent -> m s) -> s -> ExceptT ForEventFailure m s
+ EventSource.Store: foldSubSaved :: (MonadIO m) => Subscription -> (SavedEvent -> m ()) -> (SomeException -> m ()) -> m ()
+ EventSource.Store: foldSubSavedAsync :: Subscription -> (SavedEvent -> IO ()) -> (SomeException -> IO ()) -> IO (Async ())
+ EventSource.Store: forSavedEvents :: (MonadIO m, Store store) => store -> StreamName -> (SavedEvent -> m ()) -> ExceptT ForEventFailure m ()

Files

eventsource-api.cabal view
@@ -3,7 +3,7 @@ -- see: https://github.com/sol/hpack  name:           eventsource-api-version:        1.0.0+version:        1.0.1 synopsis:       Provides a eventsourcing high level API. description:    Please read README.md. category:       Eventsourcing
library/EventSource/Store.hs view
@@ -34,6 +34,12 @@   , forEvents   , foldEventsM   , foldEvents+  , forSavedEvents+  , foldSavedEventsM+  , foldSavedEvents+  , foldSubSaved+  , foldSubSavedAsync+  , ForEventFailure(..)   ) where  --------------------------------------------------------------------------------@@ -125,6 +131,31 @@   async $ foldSub sub onEvent onError  --------------------------------------------------------------------------------+-- | Similar to 'foldSub' but provides access to the 'SavedEvent' instead of+--   decoded event.+foldSubSaved :: (MonadIO m)+             => Subscription+             -> (SavedEvent -> m ())+             -> (SomeException -> m ())+             -> m ()+foldSubSaved sub onEvent onError = loop+  where+    loop = do+      res <- nextEvent sub+      case res of+        Left e -> onError e+        Right a -> onEvent a >> loop++--------------------------------------------------------------------------------+-- | Asynchronous version of 'foldSubSaved'.+foldSubSavedAsync :: Subscription+                  -> (SavedEvent -> IO ())+                  -> (SomeException -> IO ())+                  -> IO (Async ())+foldSubSavedAsync sub onEvent onError =+  async $ foldSubSaved sub onEvent onError++-------------------------------------------------------------------------------- data ExpectedVersionException   = ExpectedVersionException     { versionExceptionExpected :: ExpectedVersion@@ -232,6 +263,54 @@            -> ExceptT ForEventFailure m s foldEvents store stream k seed =   foldEventsM store stream (\s a -> return $ k s a) seed++--------------------------------------------------------------------------------+-- | Like `forEvents` but provides access to 'SavedEvent' instead of+--   decoded event.+forSavedEvents :: (MonadIO m, Store store)+               => store+               -> StreamName+               -> (SavedEvent -> m ())+               -> ExceptT ForEventFailure m ()+forSavedEvents store name k = do+  res <- streamIterator store name+  case res of+    ReadSuccess i -> loop i+    ReadFailure e -> throwError $ ForEventReadFailure e+  where+    loop i = do+      opt <- iteratorNext i+      for_ opt $ \saved -> lift (k saved) >> loop i++--------------------------------------------------------------------------------+-- | Like 'forSavedEvents' but expose signature similar to 'foldM'.+foldSavedEventsM :: (MonadIO m, Store store)+                 => store+                 -> StreamName+                 -> (s -> SavedEvent -> m s)+                 -> s+                 -> ExceptT ForEventFailure m s+foldSavedEventsM store stream k seed = mapExceptT trans action+  where+    trans m = evalStateT m seed++    action = do+      forSavedEvents store stream $ \a -> do+        s <- get+        s' <- lift $ k s a+        put s'+      get++--------------------------------------------------------------------------------+-- | Like 'foldSavedEventsM' but expose signature similar to 'foldl'.+foldSavedEvents :: (MonadIO m, Store store)+                => store+                -> StreamName+                -> (s -> SavedEvent -> s)+                -> s+                -> ExceptT ForEventFailure m s+foldSavedEvents store stream k seed =+  foldSavedEventsM store stream (\s a -> return $ k s a) seed  -------------------------------------------------------------------------------- -- | Allows to easily iterate over a stream's events.
package.yaml view
@@ -29,4 +29,4 @@ maintainer: yo.eight@gmail.com name: eventsource-api synopsis: Provides a eventsourcing high level API.-version: '1.0.0'+version: '1.0.1'