summaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/app.rs87
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(),
- }
- }
-}