diff --git a/Cargo.toml b/Cargo.toml index 7163af5..34a5394 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,9 @@ tokio = ["dep:tokio"] [dependencies] async-trait = "0.1.73" http = "0.2.9" +futures = { version = "0.3.28", default-features = false, features = [ + "async-await", +] } parking_lot = { version = "0.12.1", features = ["serde"] } serde = { version = "1.0.188", features = ["derive"] } serde_json = "1.0.107" diff --git a/src/session_store.rs b/src/session_store.rs index 41b0fac..bf87ab9 100644 --- a/src/session_store.rs +++ b/src/session_store.rs @@ -1,6 +1,7 @@ //! An arbitrary store which houses the session data. use async_trait::async_trait; +use futures::TryFutureExt; use crate::session::{Session, SessionId, SessionRecord}; @@ -77,14 +78,10 @@ where type Error = CachingStoreError; async fn save(&self, session_record: &SessionRecord) -> Result<(), Self::Error> { - self.store - .save(session_record) - .await - .map_err(Self::Error::Store)?; - self.cache - .save(session_record) - .await - .map_err(Self::Error::Cache)?; + let cache_save_fut = self.store.save(session_record).map_err(Self::Error::Store); + let store_save_fut = self.cache.save(session_record).map_err(Self::Error::Cache); + + futures::try_join!(cache_save_fut, store_save_fut)?; Ok(()) } @@ -129,14 +126,11 @@ where } async fn delete(&self, session_id: &SessionId) -> Result<(), Self::Error> { - self.store - .delete(session_id) - .await - .map_err(Self::Error::Store)?; - self.cache - .delete(session_id) - .await - .map_err(Self::Error::Cache)?; + let store_delete_fut = self.store.delete(session_id).map_err(Self::Error::Store); + let cache_delete_fut = self.cache.delete(session_id).map_err(Self::Error::Cache); + + futures::try_join!(store_delete_fut, cache_delete_fut)?; + Ok(()) } }