use rocket::{Build, fairing, Rocket}; use rocket::fairing::AdHoc; use rocket_db_pools::Database; #[derive(Database)] #[database("data_sqlite")] pub struct Db(sqlx::SqlitePool); async fn run_migrations(rocket: Rocket) -> fairing::Result { match Db::fetch(&rocket) { Some(db) => match sqlx::migrate!("./db").run(&**db).await { Ok(_) => Ok(rocket), Err(e) => { error!("Failed to initialize SQLx database: {}", e); Err(rocket) } } None => Err(rocket), } } pub fn stage() -> AdHoc { AdHoc::on_ignite("SQLx Stage", |rocket| async { rocket.attach(Db::init()) .attach(AdHoc::try_on_ignite("SQLx Migrations", run_migrations)) }) }