diff options
Diffstat (limited to 'src/boot/app.rs')
| -rw-r--r-- | src/boot/app.rs | 87 |
1 files changed, 33 insertions, 54 deletions
diff --git a/src/boot/app.rs b/src/boot/app.rs index 1ca8adb..c2766cd 100644 --- a/src/boot/app.rs +++ b/src/boot/app.rs @@ -4,10 +4,10 @@ use sqlx::sqlite::SqlitePool; use super::Snapshot; use crate::{ conversation::{self, repo::Provider as _}, - db::NotFound, + db::{self, NotFound as _}, + error::failed::{Failed, ResultExt as _}, event::{Event, Sequence, repo::Provider as _}, message::{self, repo::Provider as _}, - name, user::{self, repo::Provider as _}, vapid::{self, repo::Provider as _}, }; @@ -21,16 +21,37 @@ impl Boot { Self { db } } - pub async fn snapshot(&self) -> Result<Snapshot, Error> { - let mut tx = self.db.begin().await?; - let resume_point = tx.sequence().current().await?; - - let users = tx.users().all(resume_point).await?; - let conversations = tx.conversations().all(resume_point).await?; - let messages = tx.messages().all(resume_point).await?; - let vapid = tx.vapid().current().await.optional()?; - - tx.commit().await?; + pub async fn snapshot(&self) -> Result<Snapshot, Failed> { + let mut tx = self.db.begin().await.fail(db::failed::BEGIN)?; + let resume_point = tx + .sequence() + .current() + .await + .fail("Failed to load resume point")?; + + let users = tx + .users() + .all(resume_point) + .await + .fail("Failed to load user events")?; + let conversations = tx + .conversations() + .all(resume_point) + .await + .fail("Failed to load conversation events")?; + let messages = tx + .messages() + .all(resume_point) + .await + .fail("Failed to load message events")?; + let vapid = tx + .vapid() + .current() + .await + .optional() + .fail("Failed to load VAPID key events")?; + + tx.commit().await.fail(db::failed::COMMIT)?; let user_events = users .iter() @@ -71,45 +92,3 @@ impl Boot { }) } } - -#[derive(Debug, thiserror::Error)] -#[error(transparent)] -pub enum Error { - Database(#[from] sqlx::Error), - Name(#[from] name::Error), - Ecdsa(#[from] p256::ecdsa::Error), - Pkcs8(#[from] p256::pkcs8::Error), - WebPush(#[from] web_push::WebPushError), -} - -impl From<user::repo::LoadError> for Error { - fn from(error: user::repo::LoadError) -> Self { - use user::repo::LoadError; - match error { - LoadError::Name(error) => error.into(), - LoadError::Database(error) => error.into(), - } - } -} - -impl From<conversation::repo::LoadError> for Error { - fn from(error: conversation::repo::LoadError) -> Self { - use conversation::repo::LoadError; - match error { - LoadError::Name(error) => error.into(), - LoadError::Database(error) => error.into(), - } - } -} - -impl From<vapid::repo::Error> for Error { - fn from(error: vapid::repo::Error) -> Self { - use vapid::repo::Error; - match error { - Error::Database(error) => error.into(), - Error::Ecdsa(error) => error.into(), - Error::Pkcs8(error) => error.into(), - Error::WebPush(error) => error.into(), - } - } -} |
