diff --git a/src/esrs/postgres/store.rs b/src/esrs/postgres/store.rs index 65599778..e0830d2b 100644 --- a/src/esrs/postgres/store.rs +++ b/src/esrs/postgres/store.rs @@ -242,7 +242,7 @@ where match projector.consistency() { Consistency::Strong => projector.project(store_event, &mut transaction).await?, Consistency::Eventual => { - let _ = projector.project(store_event, &mut transaction).await; + let _result = projector.project(store_event, &mut transaction).await; } } } diff --git a/src/esrs/store.rs b/src/esrs/store.rs index 9094e734..67c7426c 100644 --- a/src/esrs/store.rs +++ b/src/esrs/store.rs @@ -1,3 +1,5 @@ +use std::ops::Deref; + use async_trait::async_trait; use chrono::{DateTime, Utc}; use uuid::Uuid; @@ -34,8 +36,9 @@ pub trait EventStore { async fn delete(&self, aggregate_id: Uuid) -> Result<(), ::Error>; } -/// Default generic implementation for every type [`Box`]. This is particularly useful -/// when there's the need in your codebase to have a generic [`EventStore`] inside your [`Aggregate`]. +/// Default generic implementation for every type implementing [`Deref`] where its `Target` is a +/// `dyn` [`EventStore`]. This is particularly useful when there's the need in your codebase to have +/// a generic [`EventStore`] inside your [`Aggregate`]. /// /// # Example /// @@ -59,9 +62,11 @@ pub trait EventStore { /// } /// ``` #[async_trait] -impl EventStore for Box + Send + Sync> +impl EventStore for T where + T: Deref + Send + Sync> + Sync, M: AggregateManager, + ::Event: 'static, { type Manager = M; @@ -69,7 +74,7 @@ where &self, aggregate_id: Uuid, ) -> Result::Event>>, ::Error> { - self.as_ref().by_aggregate_id(aggregate_id).await + self.deref().by_aggregate_id(aggregate_id).await } async fn persist( @@ -78,13 +83,13 @@ where events: Vec<::Event>, starting_sequence_number: SequenceNumber, ) -> Result::Event>>, ::Error> { - self.as_ref() + self.deref() .persist(aggregate_id, events, starting_sequence_number) .await } async fn delete(&self, aggregate_id: Uuid) -> Result<(), ::Error> { - self.as_ref().delete(aggregate_id).await + self.deref().delete(aggregate_id).await } }