use miette::Diagnostic; use sqlx::{Pool, Sqlite}; use std::path::Path; use thiserror::Error; pub type Result = std::result::Result; #[derive(Error, Debug, Diagnostic)] pub enum Error { #[error("database error: {0}")] Database(#[from] sqlx::Error), #[error("migration error: {0}")] Migration(#[from] sqlx::migrate::MigrateError), } static MIGRATOR: sqlx::migrate::Migrator = sqlx::migrate!("../api/migrations"); pub async fn migrate(database: &Path) -> Result> { let database_url = format!("sqlite:{}?mode=rwc", database.display()); let pool = sqlx::sqlite::SqlitePoolOptions::new() .connect(&database_url) .await?; MIGRATOR.run(&pool).await?; println!("Migration completed successfully"); Ok(pool) }