1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//! # 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`][juniper] crate.
//!
//!   [juniper]: https://crates.io/crates/juniper

#![warn(unused_import_braces, unused_imports, unused_qualifications)]
#![deny(
    missing_debug_implementations,
    missing_copy_implementations,
    trivial_casts,
    trivial_numeric_casts,
    unsafe_code,
    unused_must_use,
    missing_docs
)]

pub mod memory;
pub mod trivial;

mod entity;

#[cfg(test)]
mod testing;

#[doc(inline)]
pub use crate::entity::{
    CompositeEntitySink, CompositeEntitySource, CompositeEntityStore, Entity, EntitySink,
    EntitySource, EntityStore,
};
#[doc(inline)]
pub use cqrs_core::*;