use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ColumnChangeType {
RenameColumn,
ModifyColumn,
NullabilityChanged,
DefaultChanged,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ColumnChange {
pub change_type: ColumnChangeType,
pub table_name: String,
pub column_name: String,
pub new_column_name: Option<String>,
pub new_type: Option<String>,
pub nullable: Option<bool>,
pub default_value: Option<String>,
}
impl ColumnChange {
pub fn new(change_type: ColumnChangeType, table_name: String, column_name: String, value: String) -> Self {
Self {
change_type,
table_name,
column_name,
new_column_name: match change_type {
ColumnChangeType::RenameColumn => Some(value.clone()),
_ => None,
},
new_type: match change_type {
ColumnChangeType::ModifyColumn => Some(value.clone()),
_ => None,
},
nullable: None,
default_value: None,
}
}
pub fn with_nullable(mut self, nullable: bool) -> Self {
self.nullable = Some(nullable);
self
}
pub fn with_default(mut self, default: String) -> Self {
self.default_value = Some(default);
self
}
}