mf_file/
lib.rs

1pub mod document;
2pub mod error;
3pub mod history;
4pub mod record;
5pub mod zipdoc;
6pub use error::{FileError, Result};
7pub use record::{Writer, Reader, Iter, HEADER_LEN, REC_HDR};
8pub use document::{
9    DocumentWriter, DocumentReader, SegmentType, Directory, SegmentEntry,
10};
11pub use history::{TypeWrapper, encode_history_frames, decode_history_frames};
12pub use zipdoc::{ZipDocumentWriter, ZipDocumentReader};
13
14#[cfg(test)]
15mod tests {
16    use super::*;
17    use tempfile::tempdir;
18
19    #[test]
20    fn roundtrip() -> Result<()> {
21        let dir = tempdir().unwrap();
22        let path = dir.path().join("data.mff");
23
24        let mut w = Writer::create(&path, 64 * 1024 * 1024)?;
25        let off1 = w.append(b"hello")?;
26        let off2 = w.append(b"world")?;
27        let big = vec![42u8; 128 * 1024];
28        let off3 = w.append(&big)?;
29        w.flush()?;
30
31        assert!(off2 > off1 && off3 > off2);
32
33        let r = Reader::open(&path)?;
34        assert_eq!(r.get_at(off1)?, b"hello");
35        assert_eq!(r.get_at(off2)?, b"world");
36        assert_eq!(r.get_at(off3)?, &big[..]);
37        assert_eq!(r.iter().count(), 3);
38
39        drop(w);
40        let mut w2 = Writer::create(&path, 64 * 1024 * 1024)?;
41        let off4 = w2.append(b"!")?;
42        w2.flush()?;
43
44        let r2 = Reader::open(&path)?;
45        assert_eq!(r2.get_at(off4)?, b"!");
46        Ok(())
47    }
48}
49
50// moved implementations to modules: document.rs, history.rs, zipdoc.rs