diff --git a/src/rust/liblektor-rs/Cargo.toml b/src/rust/liblektor-rs/Cargo.toml index 7e9d12c79edd258b45790c32e2433e751ad17049..16435bdb492da2aa3ebe401c2a36ab4ecd016dda 100644 --- a/src/rust/liblektor-rs/Cargo.toml +++ b/src/rust/liblektor-rs/Cargo.toml @@ -7,5 +7,7 @@ edition = "2021" crate-type = [ "staticlib" ] [dependencies] -libc = "0.2.0" -diesel = { version = "2", default-features = false, features = [ "sqlite" ] } +log = "0.4" +libc = "0.2.0" +diesel_migrations = "2" +diesel = { version = "2", default-features = false, features = [ "sqlite" ] } diff --git a/src/rust/liblektor-rs/src/database/mod.rs b/src/rust/liblektor-rs/src/database/mod.rs index 8ea4ab3902e2f6c320f130e737e122c51cdeb9af..bf76fec285ed459045d8fab32af764b3b0a3a3b4 100644 --- a/src/rust/liblektor-rs/src/database/mod.rs +++ b/src/rust/liblektor-rs/src/database/mod.rs @@ -1,4 +1,24 @@ pub(self) use diesel::prelude::*; +use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness}; +pub(self) use log::*; pub mod models; pub mod schema; + +/// The migrations! +const MIGRATIONS: EmbeddedMigrations = embed_migrations!(); + +/// Run migrations in a connexion! +fn run_migration(conn: &mut SqliteConnection) -> Result<(), String> { + conn.run_pending_migrations(MIGRATIONS) + .map_err(|err| err.to_string()) + .map(|_| ()) +} + +/// Create a connexion to a database and run automatically the migrations. +pub fn establish_connection(path: impl AsRef<str>) -> Result<SqliteConnection, String> { + let mut conn = SqliteConnection::establish(path.as_ref()) + .map_err(|err| format!("error connecting to {}: {}", path.as_ref(), err))?; + self::run_migration(&mut conn)?; + Ok(conn) +}