vespertide_core/schema/
foreign_key.rs1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::schema::{names::ColumnName, names::TableName, reference::ReferenceAction};
5
6#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
7#[serde(rename_all = "snake_case")]
8pub struct ForeignKeyDef {
9 pub ref_table: TableName,
10 pub ref_columns: Vec<ColumnName>,
11 pub on_delete: Option<ReferenceAction>,
12 pub on_update: Option<ReferenceAction>,
13}
14
15#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
17#[serde(rename_all = "snake_case")]
18pub struct ReferenceSyntaxDef {
19 pub references: String,
21 #[serde(skip_serializing_if = "Option::is_none")]
22 pub on_delete: Option<ReferenceAction>,
23 #[serde(skip_serializing_if = "Option::is_none")]
24 pub on_update: Option<ReferenceAction>,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
28#[serde(rename_all = "snake_case", untagged)]
29pub enum ForeignKeySyntax {
30 String(String),
32 Reference(ReferenceSyntaxDef),
34 Object(ForeignKeyDef),
36}