Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/get-eventually/eventually-rs
Event Sourcing for Rust
https://github.com/get-eventually/eventually-rs
aggregate cqrs ddd event-sourcing eventstore rust rust-crate
Last synced: about 15 hours ago
JSON representation
Event Sourcing for Rust
- Host: GitHub
- URL: https://github.com/get-eventually/eventually-rs
- Owner: get-eventually
- License: mit
- Created: 2019-08-28T23:12:54.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-07-09T08:24:48.000Z (7 months ago)
- Last Synced: 2024-10-30T03:43:05.402Z (3 months ago)
- Topics: aggregate, cqrs, ddd, event-sourcing, eventstore, rust, rust-crate
- Language: Rust
- Homepage:
- Size: 9.14 MB
- Stars: 560
- Watchers: 4
- Forks: 30
- Open Issues: 20
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ccamel - get-eventually/eventually-rs - Event Sourcing for Rust (Rust)
README
Event Sourcing for Rust
Collection of traits and other utilities to help you build your Event-sourced applications in Rust.
## Installation
> ⚠️ **v0.5.0 is under active development**: Breaking changes are expected. If you are using `eventually` as a git dependency you should use a pinned version!
Add `eventually` into your project dependencies:
```toml
[dependencies]
eventually = { version = "0.5.0", features = ["full"], git = "https://github.com/get-eventually/eventually-rs" }
```### Note on semantic versioning
This library is **actively being developed**, and prior to `v1` release the following [Semantic versioning]()
is being adopted:* Breaking changes are tagged with a new `MINOR` release
* New features, patches and documentation are tagged with a new `PATCH` release## What is Event Sourcing?
Before diving into the crate's internals, you may be wondering what Event Sourcing is.
From [eventstore.com](https://eventstore.com/) introduction:
>Event Sourcing is an architectural pattern that is gaining popularity as a method for building modern systems. Unlike traditional databases which only store and update the current state of data, event-sourced systems store all changes as an immutable series of events in the order that they occurred and current state is derived from that event log.
## How does `eventually-rs` support Event Sourcing?
`eventually` exposes all the necessary abstraction to model your
Domain Entities (in lingo, _Aggregates_) using Domain Events, and
to save these Events using an _Event Store_ (the append-only event log).For more information, [check out the crate documentation](https://docs.rs/eventually).
You can also take a look at the [`bank-accounting`](https://github.com/get-eventually/eventually-rs/tree/main/examples/bank-accounting) example,
showcasing Event-sourced application for a generic (and simple) Bank Accounting bounded context.### Event Store backends
`eventually-rs` provides the necessary abstractions for modeling and interacting
with an Event Store.These are the following officially-supported backend implementations:
* [`eventually::event::store::InMemory`](./eventually/src/event/store.rs): simple inmemory Event Store implementation, using `std::collections::HashMap`,
* [`eventually-postgres`](./eventually-postgres): Event Store and Aggregate Root Repository implementations for PostgreSQL databases.## Contributing
You want to contribute to `eventually-rs` but you don't know where to start?
First of all, thank you for considering contributing ❤️
You can head over our [`CONTRIBUTING`](./CONTRIBUTING.md) section to know
how to contribute to the project, and — in case you don't have a clear idea what
to contribute — what is most needed needed from contributors.## License
This project is licensed under the [MIT license](LICENSE).
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in `eventually-rs` by you, shall be licensed as MIT, without any additional terms or conditions.