seq_marked/seqv/
impl_from_seq_marked.rs1use crate::Marked;
2use crate::SeqMarked;
3use crate::SeqV;
4
5impl<M, T> From<SeqMarked<(Option<M>, T)>> for Option<SeqV<M, T>> {
6 fn from(value: SeqMarked<(Option<M>, T)>) -> Self {
7 let (seq, marked) = value.into_parts();
8
9 match marked {
10 Marked::TombStone => None,
11 Marked::Normal((meta, v)) => Some(SeqV::new_with_meta(seq, meta, v)),
12 }
13 }
14}
15
16#[cfg(test)]
17mod tests {
18 use super::*;
19
20 #[test]
21 fn test_from_seq_marked_with_meta() {
22 let seq_marked = SeqMarked::new_normal(42, (Some("metadata".to_string()), 100u64));
23 let seqv: Option<SeqV<String, u64>> = seq_marked.into();
24
25 assert!(seqv.is_some());
26 let seqv = seqv.unwrap();
27 assert_eq!(seqv.seq, 42);
28 assert_eq!(seqv.meta, Some("metadata".to_string()));
29 assert_eq!(seqv.data, 100);
30 }
31
32 #[test]
33 fn test_from_seq_marked_without_meta() {
34 let seq_marked = SeqMarked::new_normal(10, (None::<String>, 200u64));
35 let seqv: Option<SeqV<String, u64>> = seq_marked.into();
36
37 assert!(seqv.is_some());
38 let seqv = seqv.unwrap();
39 assert_eq!(seqv.seq, 10);
40 assert_eq!(seqv.meta, None);
41 assert_eq!(seqv.data, 200);
42 }
43
44 #[test]
45 fn test_from_seq_marked_tombstone() {
46 let seq_marked = SeqMarked::<(Option<String>, u64)>::new_tombstone(5);
47 let seqv: Option<SeqV<String, u64>> = seq_marked.into();
48
49 assert!(seqv.is_none());
50 }
51}