eventually-postgres 0.1.2

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 tokio::sync::RwLock;
# use eventually_postgres::EventStoreBuilder;
#
# async fn dox() -> Result<(), Box<dyn std::error::Error>> {
// Open a connection with Postgres.
let (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::from(Arc::new(RwLock::new(client)));

// Events should be versioned to be used with the Postgres Event Store.
use eventually::versioned::Versioned;

// Event store for the events.
let store = {
let store = builder.event_stream::<String, Versioned<SomeEvent>>("orders");
store.create_stream().await?;
store
};

# Ok(())
# }