j_db/src/migration/mod.rs

33 lines
672 B
Rust

use crate::database::Database;
use crate::error::Result;
use crate::metadata::DBMetadata;
pub trait Migration {
fn up(&self, db: &Database) -> Result<()>;
fn down(&self, db: &Database) -> Result<()>;
fn version(&self) -> u64;
}
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum Direction {
Up,
Down,
}
pub fn do_migration<T: Migration>(db: &Database, migration: T, direction: Direction) -> Result<()> {
if direction == Direction::Up {
migration.up(db)?;
} else {
migration.down(db)?;
}
let metadata = DBMetadata {
id: None,
version: migration.version(),
};
db.insert(metadata)?;
Ok(())
}