use serde::{Deserialize, Serialize};
use crate::schema::unique_strategy::KeepPolicy;
#[derive(Debug, Clone, 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 PrimaryKeyAdditionStrategy {
DeleteDuplicates {
keep: KeepPolicy,
},
}
impl Default for PrimaryKeyAdditionStrategy {
fn default() -> Self {
Self::DeleteDuplicates {
keep: KeepPolicy::First,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_delete_duplicates_first() {
assert_eq!(
PrimaryKeyAdditionStrategy::default(),
PrimaryKeyAdditionStrategy::DeleteDuplicates {
keep: KeepPolicy::First
}
);
}
#[test]
fn serde_roundtrip_first() {
let s = PrimaryKeyAdditionStrategy::DeleteDuplicates {
keep: KeepPolicy::First,
};
let j = serde_json::to_string(&s).unwrap();
assert_eq!(j, r#"{"kind":"delete_duplicates","keep":"first"}"#);
let back: PrimaryKeyAdditionStrategy = serde_json::from_str(&j).unwrap();
assert_eq!(back, s);
}
#[test]
fn serde_roundtrip_last() {
let s = PrimaryKeyAdditionStrategy::DeleteDuplicates {
keep: KeepPolicy::Last,
};
let j = serde_json::to_string(&s).unwrap();
assert_eq!(j, r#"{"kind":"delete_duplicates","keep":"last"}"#);
let back: PrimaryKeyAdditionStrategy = serde_json::from_str(&j).unwrap();
assert_eq!(back, s);
}
}