vespertide_core/schema/
foreign_key.rs1use serde::{Deserialize, Serialize};
2
3use crate::schema::{names::ColumnName, names::TableName, reference::ReferenceAction};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
6#[cfg_attr(feature = "schema", derive(schemars::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)]
17#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
18#[serde(rename_all = "snake_case")]
19pub struct ReferenceSyntaxDef {
20 pub references: String,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub on_delete: Option<ReferenceAction>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub on_update: Option<ReferenceAction>,
26}
27
28#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
29#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
30#[serde(rename_all = "snake_case", untagged)]
31pub enum ForeignKeySyntax {
32 String(String),
34 Reference(ReferenceSyntaxDef),
36 Object(ForeignKeyDef),
38}