use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub enum ReferenceAction {
Cascade,
Restrict,
SetNull,
SetDefault,
NoAction,
}
impl ReferenceAction {
#[must_use]
pub fn to_sql_keyword(&self) -> &'static str {
match self {
Self::Cascade => "CASCADE",
Self::Restrict => "RESTRICT",
Self::SetNull => "SET NULL",
Self::SetDefault => "SET DEFAULT",
Self::NoAction => "NO ACTION",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::rstest;
#[rstest]
#[case::cascade(ReferenceAction::Cascade, "CASCADE")]
#[case::restrict(ReferenceAction::Restrict, "RESTRICT")]
#[case::set_null(ReferenceAction::SetNull, "SET NULL")]
#[case::set_default(ReferenceAction::SetDefault, "SET DEFAULT")]
#[case::no_action(ReferenceAction::NoAction, "NO ACTION")]
fn to_sql_keyword_emits_expected_token(
#[case] action: ReferenceAction,
#[case] expected: &'static str,
) {
assert_eq!(action.to_sql_keyword(), expected);
}
}