vespertide_core/schema/
constraint.rs1use 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}