[−][src]Crate cqrs
cqrs
cqrs is an event-driven framework for writing software that uses events as
the "source of truth" and implements command–query responsibility separation (CQRS).
The framework is built around a few key concepts:
- Events: The things that happened in the system
- Aggregates: Projections of events that calculate a view of the current state of the system
- Commands: Intentions which, when executed against an aggregate, may produce zero or more events, or which may be prohibited by the current state of an aggregate
- Reactions: Processes that execute an action when certain events occur in the system
The framework is written to be applicable to a generic backend, with an implementation provided for a PostgreSQL backend.
For an example of how to construct a domain which includes aggregates, events,
and commands, look at the cqrs-todo-core crate, which is a simple to-do list
implementation.
The source repository also contains a binary in the cqrs-todoql-psql directory
which demonstrates the use of the todo domain in concert with the PostgreSQL
backend and a GraphQL frontend using the juniper crate.
Modules
| memory | A basic, in-memory event stream. |
| trivial | Provides a trivial implementation of event/snapshot/entity source/sink/store constructs. |
Structs
| AlwaysSnapshot | A snapshot strategy that will always recommend taking a snapshot. |
| CompositeEntitySink | Combines an |
| CompositeEntitySource | Combines an |
| CompositeEntityStore | Combines an EntitySource and an EntitySink into a single type so that they can be jointly used as an EntityStore. |
| Entity | An identified, specific instance of a hydrated aggregate. |
| EventNumber | Represents an event sequence number, starting at 1 |
| NeverSnapshot | A snapshot strategy that will never recommend taking a snapshot. |
| VersionedAggregate | A structured tuple combining an aggregate and its current version. |
| VersionedEvent | A structured tuple combining an event number and an event. |
| VersionedEventWithMetadata | A structured tuple combining an event number and an event. |
Enums
| Precondition | A precondition that must be upheld for a command to be executed or for events to be persisted. |
| Since | The starting point when reading a stream of values from an EventSource. |
| SnapshotRecommendation | A recommendation on whether or not a snapshot should be persisted. |
| Version | An aggregate version. |
Traits
| Aggregate | A projected state built from a series of events. |
| AggregateCommand | A command that can be executed against an aggregate. |
| AggregateEvent | An event that can be applied to an aggregate. |
| AggregateId | An identifier for an aggregate. |
| CqrsError | Represents a common trait that all errors handled by CQRS should implement. |
| DeserializableEvent | An event that can be deserialized from a buffer. |
| EntitySink | A sink for persisting an Entity. |
| EntitySource | A source for loading an Entity. |
| EntityStore | A generalized entity store that can perform operations on its entities. |
| Event | A thing that happened. |
| EventSink | A sink for writing/persisting events with associated metadata. |
| EventSource | A source for reading/loading events. |
| Events | An iterable and sliceable list of events. |
| SerializableEvent | An event that can be serialized to a buffer. |
| SnapshotSink | A sink for writing/persisting snapshots of aggregates. |
| SnapshotSource | A source for reading/loading snapshots of aggregates. |
| SnapshotStrategy | A strategy determining when to recommend a snapshot be taken. |
Type Definitions
| CommandError | The error produced when this command cannot be executed against an aggregate. |
| ProducedEvent | The event type produced by this command. |
| ProducedEvents | The event sequence produced by this command. |