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        name: Option<String>,
19        columns: Vec<ColumnName>,
20    },
21    ForeignKey {
22        name: Option<String>,
23        columns: Vec<ColumnName>,
24        ref_table: TableName,
25        ref_columns: Vec<ColumnName>,
26        on_delete: Option<ReferenceAction>,
27        on_update: Option<ReferenceAction>,
28    },
29    Check {
30        name: String,
31        expr: String,
32    },
33}