seq_marked/seqv/
impl_seq_value.rs1use super::SeqV;
4use crate::SeqValue;
5
6impl<M, V> SeqValue<M, V> for SeqV<M, V> {
7 fn seq(&self) -> u64 {
8 self.seq
9 }
10
11 fn value(&self) -> Option<&V> {
12 Some(&self.data)
13 }
14
15 fn into_value(self) -> Option<V> {
16 Some(self.data)
17 }
18
19 fn meta(&self) -> Option<&M> {
20 self.meta.as_ref()
21 }
22}
23
24impl<M, V> SeqValue<M, V> for Option<SeqV<M, V>> {
25 fn seq(&self) -> u64 {
26 self.as_ref().map(|v| v.seq()).unwrap_or(0)
27 }
28
29 fn value(&self) -> Option<&V> {
30 self.as_ref().and_then(|v| v.value())
31 }
32
33 fn into_value(self) -> Option<V> {
34 self.map(|v| v.data)
35 }
36
37 fn meta(&self) -> Option<&M> {
38 self.as_ref().and_then(|v| v.meta())
39 }
40}
41
42#[cfg(test)]
43mod tests {
44 use super::*;
45
46 #[test]
47 fn test_seqv_with_meta() {
48 let sv = SeqV {
49 seq: 42,
50 meta: Some("metadata"),
51 data: 100u64,
52 };
53
54 assert_eq!(sv.seq(), 42);
55 assert_eq!(sv.value(), Some(&100));
56 assert_eq!(sv.meta(), Some(&"metadata"));
57
58 let (seq, value) = sv.unpack();
59 assert_eq!(seq, 42);
60 assert_eq!(value, Some(100));
61 }
62
63 #[test]
64 fn test_seqv_without_meta() {
65 let sv = SeqV {
66 seq: 10,
67 meta: None::<String>,
68 data: 200u64,
69 };
70
71 assert_eq!(sv.seq(), 10);
72 assert_eq!(sv.value(), Some(&200));
73 assert_eq!(sv.meta(), None);
74
75 let (seq, value) = sv.unpack();
76 assert_eq!(seq, 10);
77 assert_eq!(value, Some(200));
78 }
79
80 #[test]
81 fn test_option_seqv_some() {
82 let sv = Some(SeqV {
83 seq: 5,
84 meta: Some("test"),
85 data: 300u64,
86 });
87
88 assert_eq!(sv.seq(), 5);
89 assert_eq!(sv.value(), Some(&300));
90 assert_eq!(sv.meta(), Some(&"test"));
91
92 let (seq, value) = sv.unpack();
93 assert_eq!(seq, 5);
94 assert_eq!(value, Some(300));
95 }
96
97 #[test]
98 fn test_option_seqv_none() {
99 let sv = None::<SeqV<String, u64>>;
100
101 assert_eq!(sv.seq(), 0);
102 assert_eq!(sv.value(), None);
103 assert_eq!(sv.meta(), None);
104
105 let (seq, value) = sv.unpack();
106 assert_eq!(seq, 0);
107 assert_eq!(value, None);
108 }
109}