leaf! { uuid::Uuid }
#[cfg(test)]
#[cfg(feature = "alloc")]
mod tests {
use crate::{BTreeMapDiff, Diffable, Leaf};
use alloc::{collections::BTreeMap, vec};
#[test]
fn example_struct() {
use uuid::Uuid;
#[derive(Debug, Clone, PartialEq, Eq)]
enum SledState {
Active,
Decommissioned,
}
leaf!(SledState);
#[derive(Debug, Clone)]
struct TestStruct {
id: Uuid,
sled_state: BTreeMap<Uuid, SledState>,
}
#[derive(Debug)]
struct TestStructDiff<'daft> {
id: Leaf<&'daft Uuid>,
sled_state: BTreeMapDiff<'daft, Uuid, SledState>,
}
let sled_states = vec![
(Uuid::new_v4(), SledState::Active),
(Uuid::new_v4(), SledState::Active),
(Uuid::new_v4(), SledState::Decommissioned),
];
let a = TestStruct {
id: Uuid::new_v4(),
sled_state: sled_states.clone().into_iter().collect(),
};
let mut b = a.clone();
b.id = Uuid::new_v4();
*(b.sled_state.get_mut(&sled_states[0].0).unwrap()) =
SledState::Decommissioned;
b.sled_state.insert(Uuid::new_v4(), SledState::Active);
let diff = TestStructDiff {
id: a.id.diff(&b.id),
sled_state: a.sled_state.diff(&b.sled_state),
};
assert_ne!(diff.id.before, diff.id.after);
assert_eq!(diff.sled_state.unchanged().count(), 2);
assert_eq!(diff.sled_state.added.len(), 1);
assert_eq!(diff.sled_state.removed.len(), 0);
assert_eq!(diff.sled_state.modified().count(), 1);
}
}