1use crate::migration_data::{migrations::Migration, committed::CommittedFile};
2
3#[cfg(feature = "db_postgresql")]
4pub mod pg;
5
6#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)]
7pub enum MigrationStatus {
8 Untried,
9 Tried{up_to_date: bool},
10 Committed {tried: bool},
11 Executed
12}
13
14#[derive(Debug, Hash, PartialEq, Eq, Clone)]
15pub struct MigrationWithStatus {
16 pub migration: Migration,
17 pub status: MigrationStatus
18}
19
20pub trait DatabaseBackend {
21 fn migration_status(&mut self, commits: &CommittedFile, migrations: &[Migration]) -> anyhow::Result<Vec<MigrationWithStatus>>;
22 fn try_migrations(&mut self, migration: &[MigrationWithStatus]) -> anyhow::Result<()>;
23 fn untry_migrations(&mut self, migration: &[MigrationWithStatus], execute_revert_script: bool) -> anyhow::Result<()>;
24 fn execute_migrations(&mut self, migration: &[MigrationWithStatus]) -> anyhow::Result<()>;
25}