vespertide_core/
action.rs1use crate::schema::{
2 ColumnDef, ColumnName, ColumnType, IndexDef, IndexName, TableConstraint, TableName,
3};
4use schemars::JsonSchema;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
8#[serde(rename_all = "snake_case")]
9pub struct MigrationPlan {
10 pub comment: Option<String>,
11 #[serde(default)]
12 pub created_at: Option<String>,
13 pub version: u32,
14 pub actions: Vec<MigrationAction>,
15}
16
17#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
18#[serde(tag = "type")]
19pub enum MigrationAction {
20 #[serde(rename_all = "snake_case")]
21 CreateTable {
22 table: TableName,
23 columns: Vec<ColumnDef>,
24 constraints: Vec<TableConstraint>,
25 },
26 #[serde(rename_all = "snake_case")]
27 DeleteTable { table: TableName },
28 #[serde(rename_all = "snake_case")]
29 AddColumn {
30 table: TableName,
31 column: ColumnDef,
32 fill_with: Option<String>,
34 },
35 #[serde(rename_all = "snake_case")]
36 RenameColumn {
37 table: TableName,
38 from: ColumnName,
39 to: ColumnName,
40 },
41 #[serde(rename_all = "snake_case")]
42 DeleteColumn {
43 table: TableName,
44 column: ColumnName,
45 },
46 #[serde(rename_all = "snake_case")]
47 ModifyColumnType {
48 table: TableName,
49 column: ColumnName,
50 new_type: ColumnType,
51 },
52 #[serde(rename_all = "snake_case")]
53 AddIndex { table: TableName, index: IndexDef },
54 #[serde(rename_all = "snake_case")]
55 RemoveIndex { table: TableName, name: IndexName },
56 #[serde(rename_all = "snake_case")]
57 AddConstraint {
58 table: TableName,
59 constraint: TableConstraint,
60 },
61 #[serde(rename_all = "snake_case")]
62 RemoveConstraint {
63 table: TableName,
64 constraint: TableConstraint,
65 },
66 #[serde(rename_all = "snake_case")]
67 RenameTable { from: TableName, to: TableName },
68 #[serde(rename_all = "snake_case")]
69 RawSql { sql: String },
70}