vespertide_core/schema/
constraint.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::schema::{
5    ReferenceAction,
6    names::{ColumnName, TableName},
7};
8
9#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
10#[serde(rename_all = "snake_case", tag = "type")]
11pub enum TableConstraint {
12    PrimaryKey {
13        #[serde(default)]
14        auto_increment: bool,
15        columns: Vec<ColumnName>,
16    },
17    Unique {
18        #[serde(skip_serializing_if = "Option::is_none")]
19        name: Option<String>,
20        columns: Vec<ColumnName>,
21    },
22    ForeignKey {
23        #[serde(skip_serializing_if = "Option::is_none")]
24        name: Option<String>,
25        columns: Vec<ColumnName>,
26        ref_table: TableName,
27        ref_columns: Vec<ColumnName>,
28        on_delete: Option<ReferenceAction>,
29        on_update: Option<ReferenceAction>,
30    },
31    Check {
32        name: String,
33        expr: String,
34    },
35    Index {
36        #[serde(skip_serializing_if = "Option::is_none")]
37        name: Option<String>,
38        columns: Vec<ColumnName>,
39    },
40}