1use candid::CandidType;
2use serde::{Deserialize, Serialize};
3
4#[derive(CandidType, Clone, Debug, Deserialize, Serialize)]
11pub enum SetPatch<U> {
12 Insert(U),
13 Remove(U),
14 Overwrite { values: Vec<U> },
15 Clear,
16}
17
18#[cfg(test)]
23mod tests {
24 use super::*;
25 use crate::traits::UpdateView;
26 use std::collections::HashSet;
27
28 #[test]
29 fn set_insert_remove_without_clear() {
30 let mut set: HashSet<u8> = [1, 2, 3].into_iter().collect();
31 let patches = vec![SetPatch::Remove(2), SetPatch::Insert(4)];
32
33 set.merge(patches).expect("set patch merge should succeed");
34 let expected: HashSet<u8> = [1, 3, 4].into_iter().collect();
35 assert_eq!(set, expected);
36 }
37
38 #[test]
39 fn set_overwrite_replaces_contents() {
40 let mut set: HashSet<u8> = [1, 2, 3].into_iter().collect();
41 let patches = vec![SetPatch::Overwrite {
42 values: vec![3u8, 4, 5],
43 }];
44
45 set.merge(patches).expect("set patch merge should succeed");
46 let expected: HashSet<u8> = [3, 4, 5].into_iter().collect();
47 assert_eq!(set, expected);
48 }
49}