mod kinds;
use serde::{Deserialize, Serialize};
pub use kinds::{AddColumn, AlterColumn, DropColumn, RawSql};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct Migration {
#[serde(default)]
pub name: String,
pub operations: Vec<Operation>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum Operation {
AddColumn(AddColumn),
AlterColumn(AlterColumn),
DropColumn(DropColumn),
Sql(RawSql),
}
impl Operation {
pub fn table(&self) -> Option<&str> {
match self {
Self::AddColumn(op) => Some(&op.table),
Self::AlterColumn(op) => Some(&op.table),
Self::DropColumn(op) => Some(&op.table),
Self::Sql(_) => None,
}
}
pub fn needs_backfill(&self) -> bool {
match self {
Self::AddColumn(op) => op.up.is_some(),
Self::AlterColumn(_) => true,
Self::DropColumn(op) => op.down.is_some(),
Self::Sql(_) => false,
}
}
}