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