use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
#[serde(tag = "kind", rename_all = "snake_case")]
#[non_exhaustive]
pub enum ForeignKeyOrphanStrategy {
NullifyOrphans,
DeleteOrphans,
}
impl Default for ForeignKeyOrphanStrategy {
fn default() -> Self {
Self::NullifyOrphans
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_nullify_orphans() {
assert_eq!(
crate::ForeignKeyOrphanStrategy::default(),
ForeignKeyOrphanStrategy::NullifyOrphans
);
}
#[test]
fn serde_roundtrip_nullify() {
let s = ForeignKeyOrphanStrategy::NullifyOrphans;
let j = serde_json::to_string(&s).unwrap();
assert_eq!(j, r#"{"kind":"nullify_orphans"}"#);
let back: ForeignKeyOrphanStrategy = serde_json::from_str(&j).unwrap();
assert_eq!(back, s);
}
#[test]
fn serde_roundtrip_delete() {
let s = ForeignKeyOrphanStrategy::DeleteOrphans;
let j = serde_json::to_string(&s).unwrap();
assert_eq!(j, r#"{"kind":"delete_orphans"}"#);
let back: ForeignKeyOrphanStrategy = serde_json::from_str(&j).unwrap();
assert_eq!(back, s);
}
}