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