-- 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