seq_marked/seqv/
impl_from_seq_marked.rs

1use 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}