#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[non_exhaustive]
pub enum OnDelete {
Cascade,
Restrict,
SetNull,
SetDefault,
Protect,
DoNothing,
}
impl Default for OnDelete {
fn default() -> Self {
OnDelete::Restrict
}
}
impl OnDelete {
pub fn as_sql(self) -> &'static str {
match self {
OnDelete::Cascade => "CASCADE",
OnDelete::Restrict => "RESTRICT",
OnDelete::SetNull => "SET NULL",
OnDelete::SetDefault => "SET DEFAULT",
OnDelete::Protect => "RESTRICT",
OnDelete::DoNothing => "NO ACTION",
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn on_delete_default_is_restrict() {
assert_eq!(OnDelete::default(), OnDelete::Restrict);
}
#[test]
fn on_delete_as_sql_per_variant() {
assert_eq!(OnDelete::Cascade.as_sql(), "CASCADE");
assert_eq!(OnDelete::Restrict.as_sql(), "RESTRICT");
assert_eq!(OnDelete::SetNull.as_sql(), "SET NULL");
assert_eq!(OnDelete::SetDefault.as_sql(), "SET DEFAULT");
assert_eq!(OnDelete::DoNothing.as_sql(), "NO ACTION");
}
#[test]
fn on_delete_protect_aliases_restrict() {
assert_eq!(OnDelete::Protect.as_sql(), "RESTRICT");
}
}