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 #[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}