seq-marked 0.3.5

Sequence-numbered values with tombstone support for LSM trees and versioned data.
Documentation
use crate::Marked;
use crate::SeqMarked;
use crate::SeqV;

impl<M, T> From<SeqMarked<(Option<M>, T)>> for Option<SeqV<M, T>> {
    fn from(value: SeqMarked<(Option<M>, T)>) -> Self {
        let (seq, marked) = value.into_parts();

        match marked {
            Marked::TombStone => None,
            Marked::Normal((meta, v)) => Some(SeqV::new_with_meta(seq, meta, v)),
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_from_seq_marked_with_meta() {
        let seq_marked = SeqMarked::new_normal(42, (Some("metadata".to_string()), 100u64));
        let seqv: Option<SeqV<String, u64>> = seq_marked.into();

        assert!(seqv.is_some());
        let seqv = seqv.unwrap();
        assert_eq!(seqv.seq, 42);
        assert_eq!(seqv.meta, Some("metadata".to_string()));
        assert_eq!(seqv.data, 100);
    }

    #[test]
    fn test_from_seq_marked_without_meta() {
        let seq_marked = SeqMarked::new_normal(10, (None::<String>, 200u64));
        let seqv: Option<SeqV<String, u64>> = seq_marked.into();

        assert!(seqv.is_some());
        let seqv = seqv.unwrap();
        assert_eq!(seqv.seq, 10);
        assert_eq!(seqv.meta, None);
        assert_eq!(seqv.data, 200);
    }

    #[test]
    fn test_from_seq_marked_tombstone() {
        let seq_marked = SeqMarked::<(Option<String>, u64)>::new_tombstone(5);
        let seqv: Option<SeqV<String, u64>> = seq_marked.into();

        assert!(seqv.is_none());
    }
}