use serde::{Deserialize, Serialize};
use crate::imr::Field;
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct MigrationFile {
pub migration: Migration,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(rename_all = "PascalCase")]
pub struct Migration {
pub hash: String,
pub initial: bool,
#[serde(skip)]
pub id: u16,
#[serde(skip)]
pub name: String,
pub dependency: Option<u16>,
pub replaces: Vec<u16>,
pub operations: Vec<Operation>,
}
#[derive(Serialize, Deserialize, Debug, Clone)]
#[serde(tag = "Type")]
pub enum Operation {
#[serde(rename_all = "PascalCase")]
CreateModel {
name: String,
fields: Vec<Field>,
},
#[serde(rename_all = "PascalCase")]
RenameModel {
old: String,
new: String,
},
#[serde(rename_all = "PascalCase")]
DeleteModel {
name: String,
},
#[serde(rename_all = "PascalCase")]
CreateField {
model: String,
field: Field,
},
#[serde(rename_all = "PascalCase")]
RenameField {
table_name: String,
old: String,
new: String,
},
#[serde(rename_all = "PascalCase")]
DeleteField {
model: String,
name: String,
},
#[serde(rename_all = "PascalCase")]
RawSQL {
#[serde(default)]
structure_safe: bool,
#[serde(rename = "SQLite")]
sqlite: String,
#[serde(rename = "Postgres")]
postgres: String,
#[serde(rename = "MySQL")]
mysql: String,
},
}