diff options
| -rw-r--r-- | src/app.rs | 11 | ||||
| -rw-r--r-- | src/boot/app.rs | 8 | ||||
| -rw-r--r-- | src/boot/handlers/boot/mod.rs | 9 | ||||
| -rw-r--r-- | src/boot/handlers/boot/test.rs | 16 | ||||
| -rw-r--r-- | src/test/fixtures/boot.rs | 11 |
5 files changed, 35 insertions, 20 deletions
@@ -1,3 +1,4 @@ +use axum::extract::FromRef; use sqlx::sqlite::SqlitePool; #[cfg(test)] @@ -33,8 +34,8 @@ impl App { } impl App { - pub const fn boot(&self) -> Boot<'_> { - Boot::new(&self.db) + pub fn boot(&self) -> Boot { + Boot::new(self.db.clone()) } pub const fn conversations(&self) -> Conversations<'_> { @@ -70,3 +71,9 @@ impl App { Users::new(&self.db, &self.events) } } + +impl FromRef<App> for Boot { + fn from_ref(app: &App) -> Self { + app.boot() + } +} diff --git a/src/boot/app.rs b/src/boot/app.rs index 0ed5d1b..840243e 100644 --- a/src/boot/app.rs +++ b/src/boot/app.rs @@ -10,12 +10,12 @@ use crate::{ user::{self, repo::Provider as _}, }; -pub struct Boot<'a> { - db: &'a SqlitePool, +pub struct Boot { + db: SqlitePool, } -impl<'a> Boot<'a> { - pub const fn new(db: &'a SqlitePool) -> Self { +impl Boot { + pub const fn new(db: SqlitePool) -> Self { Self { db } } diff --git a/src/boot/handlers/boot/mod.rs b/src/boot/handlers/boot/mod.rs index 3e022b1..5ff7802 100644 --- a/src/boot/handlers/boot/mod.rs +++ b/src/boot/handlers/boot/mod.rs @@ -7,15 +7,18 @@ use axum::{ use serde::Serialize; use crate::{ - app::App, boot::Snapshot, error::Internal, event::Heartbeat, login::Login, + boot::{Snapshot, app::Boot}, + error::Internal, + event::Heartbeat, + login::Login, token::extract::Identity, }; #[cfg(test)] mod test; -pub async fn handler(State(app): State<App>, identity: Identity) -> Result<Response, Internal> { - let snapshot = app.boot().snapshot().await?; +pub async fn handler(State(boot): State<Boot>, identity: Identity) -> Result<Response, Internal> { + let snapshot = boot.snapshot().await?; let heartbeat = Heartbeat::TIMEOUT; Ok(Response { diff --git a/src/boot/handlers/boot/test.rs b/src/boot/handlers/boot/test.rs index cb50442..a9891eb 100644 --- a/src/boot/handlers/boot/test.rs +++ b/src/boot/handlers/boot/test.rs @@ -8,7 +8,7 @@ async fn returns_identity() { let app = fixtures::scratch_app().await; let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer.clone()) + let response = super::handler(State(app.boot()), viewer.clone()) .await .expect("boot always succeeds"); @@ -21,7 +21,7 @@ async fn includes_users() { let spectator = fixtures::user::create(&app, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -42,7 +42,7 @@ async fn includes_conversations() { let conversation = fixtures::conversation::create(&app, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -65,7 +65,7 @@ async fn includes_messages() { let message = fixtures::message::send(&app, &conversation, &sender, &fixtures::now()).await; let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -94,7 +94,7 @@ async fn includes_expired_messages() { .expect("expiry never fails"); let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -136,7 +136,7 @@ async fn includes_deleted_messages() { .expect("deleting valid message succeeds"); let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -175,7 +175,7 @@ async fn includes_expired_conversations() { .expect("expiry never fails"); let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); @@ -214,7 +214,7 @@ async fn includes_deleted_conversations() { .expect("deleting a valid conversation succeeds"); let viewer = fixtures::identity::fictitious(); - let response = super::handler(State(app), viewer) + let response = super::handler(State(app.boot()), viewer) .await .expect("boot always succeeds"); diff --git a/src/test/fixtures/boot.rs b/src/test/fixtures/boot.rs index 120726f..7421512 100644 --- a/src/test/fixtures/boot.rs +++ b/src/test/fixtures/boot.rs @@ -1,7 +1,12 @@ -use crate::{app::App, event::Sequence}; +use axum::extract::FromRef; -pub async fn resume_point(app: &App) -> Sequence { - app.boot() +use crate::{boot::app::Boot, event::Sequence}; + +pub async fn resume_point<App>(app: &App) -> Sequence +where + Boot: FromRef<App>, +{ + Boot::from_ref(app) .snapshot() .await .expect("boot always succeeds") |
