eventually-postgres 0.2.0

Event Store implementation using PostgreSQL for the Eventually crate
Documentation

eventually type implementations for PostgreSQL.

Event Store

This crate includes an EventStore implementation using PostgreSQL as backend data source.

Example usage:

# use std::sync::Arc;
# use eventually_postgres::EventStoreBuilder;
#
# async fn dox() -> Result<(), Box<dyn std::error::Error>> {
// Open a connection with Postgres.
let (mut client, connection) =
tokio_postgres::connect("postgres://user@pass:localhost:5432/db", tokio_postgres::NoTls)
.await
.map_err(|err| {
eprintln!("failed to connect to Postgres: {}", err);
err
})?;

// The connection, responsible for the actual IO, must be handled by a different
// execution context.
tokio::spawn(async move {
if let Err(e) = connection.await {
eprintln!("connection error: {}", e);
}
});

// A domain event example -- it is deliberately simple.
#[derive(Debug, Clone)]
struct SomeEvent;

// Use an EventStoreBuilder to build multiple EventStore instances.
let builder = EventStoreBuilder::migrate_database(&mut client)
.await?
.builder(Arc::new(client));

// Event store for the events.
//
// When building an new EventStore instance, a type name is always needed
// to distinguish between different aggregates.
//
// You can also use std::any::type_name for that.
let store = builder.build::<String, SomeEvent>("aggregate-name").await?;

# Ok(())
# }