quorum_set/progress/
vec_progress_entry.rs1#[cfg(doc)]
2use crate::VecProgress;
3
4pub trait VecProgressEntry {
9 type Id: PartialEq;
11
12 type Progress: Clone + Default + Ord;
14
15 fn id(&self) -> &Self::Id;
17
18 fn progress(&self) -> &Self::Progress;
20
21 fn progress_mut(&mut self) -> &mut Self::Progress;
23
24 fn id_progress(&self) -> (&Self::Id, &Self::Progress) {
26 (self.id(), self.progress())
27 }
28
29 fn id_progress_owned(&self) -> (Self::Id, Self::Progress)
31 where Self::Id: Clone {
32 let (id, progress) = self.id_progress();
33 (id.clone(), progress.clone())
34 }
35}
36
37pub trait VecProgressEntryData: VecProgressEntry {
39 type Data;
41
42 fn data(&self) -> &Self::Data;
44
45 fn data_mut(&mut self) -> &mut Self::Data;
47}
48
49impl<ID, Progress> VecProgressEntry for (ID, Progress)
50where
51 ID: PartialEq,
52 Progress: Clone + Default + Ord,
53{
54 type Id = ID;
55 type Progress = Progress;
56
57 fn id(&self) -> &Self::Id {
58 &self.0
59 }
60
61 fn progress(&self) -> &Self::Progress {
62 &self.1
63 }
64
65 fn progress_mut(&mut self) -> &mut Self::Progress {
66 &mut self.1
67 }
68}
69
70#[cfg(test)]
71mod tests {
72 use super::VecProgressEntry;
73
74 #[test]
75 fn test_tuple_entry() {
76 let mut entry = (3u64, 7u64);
77
78 assert_eq!(&3, entry.id());
79 assert_eq!(&7, entry.progress());
80 assert_eq!((&3, &7), entry.id_progress());
81 assert_eq!((3, 7), entry.id_progress_owned());
82
83 *entry.progress_mut() = 9;
84 assert_eq!((3, 9), entry);
85 }
86}