use serde::{Deserialize, Serialize};
use crate::schema::{names::ColumnName, names::TableName, reference::ReferenceAction};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub struct ForeignKeyDef {
pub ref_table: TableName,
pub ref_columns: Vec<ColumnName>,
pub on_delete: Option<ReferenceAction>,
pub on_update: Option<ReferenceAction>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
pub struct ReferenceSyntaxDef {
pub references: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub on_delete: Option<ReferenceAction>,
#[serde(skip_serializing_if = "Option::is_none")]
pub on_update: Option<ReferenceAction>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case", untagged)]
pub enum ForeignKeySyntax {
String(String),
Reference(ReferenceSyntaxDef),
Object(ForeignKeyDef),
}