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", rename_all = "snake_case")]
19pub enum MigrationAction {
20 CreateTable {
21 table: TableName,
22 columns: Vec<ColumnDef>,
23 constraints: Vec<TableConstraint>,
24 },
25 DeleteTable {
26 table: TableName,
27 },
28 AddColumn {
29 table: TableName,
30 column: ColumnDef,
31 fill_with: Option<String>,
33 },
34 RenameColumn {
35 table: TableName,
36 from: ColumnName,
37 to: ColumnName,
38 },
39 DeleteColumn {
40 table: TableName,
41 column: ColumnName,
42 },
43 ModifyColumnType {
44 table: TableName,
45 column: ColumnName,
46 new_type: ColumnType,
47 },
48 AddIndex {
49 table: TableName,
50 index: IndexDef,
51 },
52 RemoveIndex {
53 table: TableName,
54 name: IndexName,
55 },
56 AddConstraint {
57 table: TableName,
58 constraint: TableConstraint,
59 },
60 RemoveConstraint {
61 table: TableName,
62 constraint: TableConstraint,
63 },
64 RenameTable {
65 from: TableName,
66 to: TableName,
67 },
68 RawSql {
69 sql: String,
70 },
71}