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 +1/−1
- library/EventSource/Store.hs +79/−0
- package.yaml +1/−1
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'