-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Provides an eventsourcing high level API. -- -- A high-level eventsourcing library. @package eventsource-api @version 1.5.1 module EventSource.Types -- | Opaque data type used to store raw data. data Data Data :: ByteString -> Data DataAsJson :: Value -> Data -- | Sometimes, having to implement a FromJSON instance isn't -- flexible enough. JsonParsing allow to pass parameters when -- parsing from a JSON value while remaining composable. newtype JsonParsing a JsonParsing :: (Value -> Parser a) -> JsonParsing a -- | Returns Data content as a ByteString. dataAsBytes :: Data -> ByteString -- | Creates a Data object from a raw ByteString. dataFromBytes :: ByteString -> Data -- | Creates a Data object from a JSON object. dataFromJson :: ToJSON a => a -> Data -- | Returns Data content as any value that implements -- FromJSON type-class. dataAsJson :: FromJSON a => Data -> Either Text a -- | Uses a JsonParsing comuputation to extract a value. dataAsParsing :: Data -> JsonParsing a -> Either Text a -- | Like dataAsParsing but doesn't require you to use -- JsonParsing. dataAsParse :: Data -> (Value -> Parser a) -> Either Text a -- | Used to store a set a properties. One example is to be used as -- Event metadata. newtype Properties Properties :: Map Text Text -> Properties -- | Retrieves a value associated with the given key. property :: MonadPlus m => Text -> Properties -> m Text -- | Builds a Properties with a single pair of key-value. singleton :: Text -> Text -> Properties -- | Adds a pair of key-value into given Properties. setProperty :: Text -> Text -> Properties -> Properties -- | Returns all associated key-value pairs as a list. properties :: Properties -> [(Text, Text)] -- | Used to identify an event. newtype EventId EventId :: UUID -> EventId -- | Generates a fresh EventId. freshEventId :: MonadBase IO m => m EventId -- | Represents a stream name. newtype StreamName StreamName :: Text -> StreamName -- | Used to identity the type of an Event. newtype EventType EventType :: Text -> EventType -- | Sets EventType for an Event. setEventType :: EventType -> State Event () -- | Sets Eventid for an Event. setEventId :: EventId -> State Event () -- | Sets a payload for an Event. setEventPayload :: Data -> State Event () -- | Sets metadata for an Event. setEventMetadata :: Properties -> State Event () -- | Encapsulates an event which is about to be saved. data Event Event :: !EventType -> !EventId -> !Data -> !Maybe Properties -> Event [eventType] :: Event -> !EventType [eventId] :: Event -> !EventId [eventPayload] :: Event -> !Data [eventMetadata] :: Event -> !Maybe Properties -- | Represents an event that links another event from a different stream. data LinkEvent LinkEvent :: !EventNumber -> !Event -> LinkEvent [linkEventNumber] :: LinkEvent -> !EventNumber [linkEvent] :: LinkEvent -> !Event -- | Represents an event index in a stream. newtype EventNumber EventNumber :: Int64 -> EventNumber -- | Represents an event that's saved into the event store. data SavedEvent SavedEvent :: !EventNumber -> !Event -> !Maybe LinkEvent -> SavedEvent [eventNumber] :: SavedEvent -> !EventNumber [savedEvent] :: SavedEvent -> !Event [savedLinkEvent] :: SavedEvent -> !Maybe LinkEvent -- | Deserializes a SavedEvent. savedEventAs :: DecodeEvent a => SavedEvent -> Either Text a -- | Represents batch of events read from a store. data Slice' a Slice' :: ![SavedEvent] -> !Bool -> !a -> Slice' a [sliceEvents] :: Slice' a -> ![SavedEvent] [sliceEndOfStream] :: Slice' a -> !Bool [sliceNext] :: Slice' a -> !a type Slice = Slice' EventNumber sliceNextEventNumber :: Slice -> EventNumber -- | Deserializes a Slice's events. sliceEventsAs :: DecodeEvent a => Slice -> Either Text [a] -- | Encodes a data object into an Event. encodeEvent get -- passed an EventId in a case where a fresh id is needed. class EncodeEvent a encodeEvent :: EncodeEvent a => a -> State Event () -- | Decodes an Event into a data object. class DecodeEvent a decodeEvent :: DecodeEvent a => Event -> Either Text a newtype DecodeEventException DecodeEventException :: Text -> DecodeEventException -- | The purpose of ExpectedVersion is to make sure a certain stream -- state is at an expected point in order to carry out a write. data ExpectedVersion AnyVersion :: ExpectedVersion NoStream :: ExpectedVersion StreamExists :: ExpectedVersion ExactVersion :: EventNumber -> ExpectedVersion -- | Statuses you can get on every read attempt. data ReadStatus a ReadSuccess :: a -> ReadStatus a ReadFailure :: ReadFailure -> ReadStatus a -- | Returns True is ReadStatus is a ReadSuccess. isReadSuccess :: ReadStatus a -> Bool -- | Returns False is ReadStatus is a ReadStatus. isReadFailure :: ReadStatus a -> Bool -- | Represents the different kind of failure you can get when reading. data ReadFailure StreamNotFound :: StreamName -> ReadFailure ReadError :: Maybe Text -> ReadFailure AccessDenied :: StreamName -> ReadFailure instance GHC.Show.Show a => GHC.Show.Show (EventSource.Types.ReadStatus a) instance GHC.Show.Show EventSource.Types.ReadFailure instance GHC.Classes.Eq EventSource.Types.ExpectedVersion instance GHC.Show.Show EventSource.Types.ExpectedVersion instance GHC.Show.Show EventSource.Types.DecodeEventException instance GHC.Show.Show a => GHC.Show.Show (EventSource.Types.Slice' a) instance GHC.Show.Show EventSource.Types.SavedEvent instance GHC.Show.Show EventSource.Types.LinkEvent instance Data.Aeson.Types.ToJSON.ToJSON EventSource.Types.EventNumber instance Data.Aeson.Types.FromJSON.FromJSON EventSource.Types.EventNumber instance GHC.Show.Show EventSource.Types.EventNumber instance GHC.Enum.Enum EventSource.Types.EventNumber instance GHC.Num.Num EventSource.Types.EventNumber instance GHC.Classes.Ord EventSource.Types.EventNumber instance GHC.Classes.Eq EventSource.Types.EventNumber instance GHC.Show.Show EventSource.Types.Event instance Data.Aeson.Types.FromJSON.FromJSON EventSource.Types.EventType instance Data.Aeson.Types.ToJSON.ToJSON EventSource.Types.EventType instance GHC.Classes.Eq EventSource.Types.EventType instance Data.Aeson.Types.FromJSON.FromJSON EventSource.Types.StreamName instance Data.Aeson.Types.ToJSON.ToJSON EventSource.Types.StreamName instance GHC.Classes.Ord EventSource.Types.StreamName instance GHC.Classes.Eq EventSource.Types.StreamName instance GHC.Classes.Ord EventSource.Types.EventId instance GHC.Classes.Eq EventSource.Types.EventId instance GHC.Base.Monoid EventSource.Types.Properties instance GHC.Base.Semigroup EventSource.Types.Properties instance GHC.Base.Functor EventSource.Types.ReadStatus instance Data.Foldable.Foldable EventSource.Types.ReadStatus instance Data.Traversable.Traversable EventSource.Types.ReadStatus instance GHC.Exception.Type.Exception EventSource.Types.ReadFailure instance GHC.Exception.Type.Exception EventSource.Types.DecodeEventException instance EventSource.Types.DecodeEvent EventSource.Types.Event instance EventSource.Types.EncodeEvent EventSource.Types.Event instance GHC.Show.Show EventSource.Types.EventType instance Data.String.IsString EventSource.Types.EventType instance GHC.Show.Show EventSource.Types.StreamName instance Data.String.IsString EventSource.Types.StreamName instance Data.Aeson.Types.ToJSON.ToJSON EventSource.Types.EventId instance Data.Aeson.Types.FromJSON.FromJSON EventSource.Types.EventId instance GHC.Show.Show EventSource.Types.EventId instance GHC.Show.Show EventSource.Types.Properties instance Data.Aeson.Types.ToJSON.ToJSON EventSource.Types.Properties instance Data.Aeson.Types.FromJSON.FromJSON EventSource.Types.Properties instance GHC.Base.Functor EventSource.Types.JsonParsing instance GHC.Base.Applicative EventSource.Types.JsonParsing instance GHC.Base.Monad EventSource.Types.JsonParsing instance GHC.Show.Show EventSource.Types.Data module EventSource.Store.Internal.Iterator -- | Represents batch information needed to read a stream. data Batch' a Batch' :: !a -> !Int32 -> Batch' a [batchFrom] :: Batch' a -> !a [batchSize] :: Batch' a -> !Int32 -- | Starts a Batch from a given point. The batch size is set to -- default, which is 500. startFrom :: a -> Batch' a data IteratorOverState a IteratorOverAvailable :: Slice' a -> IteratorOverState a IteratorOverClosed :: IteratorOverState a data IteratorOverAction a IteratorOverEvent :: SavedEvent -> IteratorOverAction a IteratorOverNextBatch :: a -> IteratorOverAction a IteratorOverEndOfStream :: IteratorOverAction a iterateOver :: MonadBase IO m => IORef (IteratorOverState a) -> (Batch' a -> m (Async (ReadStatus (Slice' a)))) -> m (Maybe SavedEvent) module EventSource.Store -- | Represents batch information needed to read a stream. data Batch' a Batch' :: !a -> !Int32 -> Batch' a [batchFrom] :: Batch' a -> !a [batchSize] :: Batch' a -> !Int32 type Batch = Batch' EventNumber -- | A subscription allows to be notified on every change occuring on a -- stream. data Subscription Subscription :: SubscriptionId -> (forall m. MonadBase IO m => Stream (Of SavedEvent) m ()) -> Subscription [subscriptionId] :: Subscription -> SubscriptionId [subscriptionStream] :: Subscription -> forall m. MonadBase IO m => Stream (Of SavedEvent) m () -- | Represents a subscription id. data SubscriptionId data ExpectedVersionException ExpectedVersionException :: ExpectedVersion -> ExpectedVersion -> ExpectedVersionException [versionExceptionExpected] :: ExpectedVersionException -> ExpectedVersion [versionExceptionActual] :: ExpectedVersionException -> ExpectedVersion -- | Main event store abstraction. It exposes essential features expected -- from an event store. class Store store -- | Appends a batch of events at the end of a stream. appendEvents :: (Store store, EncodeEvent a, MonadBase IO m) => store -> StreamName -> ExpectedVersion -> [a] -> m (Async EventNumber) -- | Reads a stream in a stream-processing fashion. readStream :: (Store store, MonadBase IO m) => store -> StreamName -> Batch -> Stream (Of SavedEvent) (ExceptT ReadFailure m) () -- | Subscribes to given stream. subscribe :: (Store store, MonadBase IO m) => store -> StreamName -> m Subscription -- | Encapsulates to an abstract store. toStore :: Store store => store -> SomeStore -- | Utility type to pass any store that implements Store typeclass. data SomeStore SomeStore :: store -> SomeStore -- | Returns a fresh subscription id. freshSubscriptionId :: MonadBase IO m => m SubscriptionId -- | Starts a Batch from a given point. The batch size is set to -- default, which is 500. startFrom :: a -> Batch' a -- | Appends a single event at the end of a stream. appendEvent :: (EncodeEvent a, MonadBase IO m, Store store) => store -> StreamName -> ExpectedVersion -> a -> m (Async EventNumber) -- | Throws an exception in case ExceptT was a Left. unhandled :: (MonadBase IO m, Exception e) => Stream (Of a) (ExceptT e m) () -> Stream (Of a) m () instance GHC.Show.Show EventSource.Store.ExpectedVersionException instance GHC.Show.Show EventSource.Store.SubscriptionId instance GHC.Classes.Ord EventSource.Store.SubscriptionId instance GHC.Classes.Eq EventSource.Store.SubscriptionId instance EventSource.Store.Store EventSource.Store.SomeStore instance GHC.Exception.Type.Exception EventSource.Store.ExpectedVersionException module EventSource