seq_marked/seq_marked/
impl_seq_value.rs1use crate::SeqMarked;
2use crate::SeqValue;
3
4impl<M, T> SeqValue<M, T> for SeqMarked<(Option<M>, T)> {
6 fn seq(&self) -> u64 {
7 self.user_seq()
8 }
9
10 fn value(&self) -> Option<&T> {
11 self.data_ref().map(|(_meta, value)| value)
12 }
13
14 fn into_value(self) -> Option<T> {
15 self.into_data().map(|(_meta, value)| value)
16 }
17
18 fn meta(&self) -> Option<&M> {
19 self.data_ref().and_then(|(meta, _value)| meta.as_ref())
20 }
21}
22
23#[cfg(test)]
24mod tests {
25 use super::*;
26
27 #[test]
28 fn test_seq_value_with_meta() {
29 let sv = SeqMarked::new_normal(42, (Some("metadata"), 100u64));
30
31 assert_eq!(sv.seq(), 42);
32 assert_eq!(sv.value(), Some(&100));
33 assert_eq!(sv.meta(), Some(&"metadata"));
34
35 let (seq, value) = sv.unpack();
36 assert_eq!(seq, 42);
37 assert_eq!(value, Some(100));
38 }
39
40 #[test]
41 fn test_seq_value_without_meta() {
42 let sv = SeqMarked::new_normal(10, (None::<String>, 200u64));
43
44 assert_eq!(sv.seq(), 10);
45 assert_eq!(sv.value(), Some(&200));
46 assert_eq!(sv.meta(), None);
47
48 let (seq, value) = sv.unpack();
49 assert_eq!(seq, 10);
50 assert_eq!(value, Some(200));
51 }
52
53 #[test]
54 fn test_seq_value_tombstone() {
55 let sv = SeqMarked::<(Option<String>, u64)>::new_tombstone(5);
56
57 assert_eq!(sv.seq(), 0);
58 assert_eq!(sv.value(), None);
59 assert_eq!(sv.meta(), None);
60
61 let (seq, value) = sv.unpack();
62 assert_eq!(seq, 0);
63 assert_eq!(value, None);
64 }
65}