1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::migration_data::{migrations::Migration, committed::CommittedFile};

#[cfg(feature = "db_postgresql")]
pub mod pg;

#[derive(Debug, Hash, PartialEq, Eq, Clone, Copy)]
pub enum MigrationStatus {
  Untried,
  Tried{up_to_date: bool},
  Committed {tried: bool},
  Executed
}

#[derive(Debug, Hash, PartialEq, Eq, Clone)]
pub struct MigrationWithStatus {
  pub migration: Migration,
  pub status: MigrationStatus
}

pub trait DatabaseBackend {
  fn migration_status(&mut self, commits: &CommittedFile, migrations: &[Migration]) -> anyhow::Result<Vec<MigrationWithStatus>>;
  fn try_migrations(&mut self, migration: &[MigrationWithStatus]) -> anyhow::Result<()>;
  fn untry_migrations(&mut self, migration: &[MigrationWithStatus]) -> anyhow::Result<()>;
  fn execute_migrations(&mut self, migration: &[MigrationWithStatus]) -> anyhow::Result<()>;
}