1mod codec;
2mod core_api;
3mod encoding;
4mod file_header;
5mod page;
6mod reader;
7mod repair;
8mod writer;
9
10pub use codec::Codec;
11pub use core_api::{
12 create_writer as create_core_writer, open_reader as open_core_reader,
13 open_writer as open_core_writer, MaintenanceService,
14};
15pub use encoding::{decode_page_payload, encode_page_payload};
16pub use file_header::{
17 update_counts, update_metadata, FileHeader, FILE_HEADER_LEN, MAGIC, MAX_PAGE_SIZE,
18 MIN_PAGE_SIZE, VERSION,
19};
20pub use page::{Encoding, PageHeader, PAGE_HEADER_LEN};
21pub use reader::Reader;
22pub use repair::repair_committed_tail;
23pub use writer::{
24 CodecSelection, EncodingSelection, PackingStats, PagePacking, Writer, WriterOptions,
25 DEFAULT_CODEC, DEFAULT_ENCODING, DEFAULT_PAGE_PACKING, DEFAULT_PAGE_SIZE, DEFAULT_ZSTD_LEVEL,
26};
27
28use thiserror::Error;
29
30pub type Result<T> = std::result::Result<T, V2Error>;
31
32#[derive(Debug, Error)]
33pub enum V2Error {
34 #[error("invalid FWOB v2 file header")]
35 InvalidFileHeader,
36
37 #[error("invalid FWOB v2 page header at page {0}")]
38 InvalidPageHeader(u64),
39
40 #[error("unsupported codec {0}")]
41 UnsupportedCodec(u8),
42
43 #[error("unsupported encoding {0}")]
44 UnsupportedEncoding(u8),
45
46 #[error("page payload exceeds page capacity: compressed {compressed}, capacity {capacity}")]
47 PageOverflow { compressed: usize, capacity: usize },
48
49 #[error("frame does not fit into an empty page")]
50 FrameTooLarge,
51
52 #[error("key order violation")]
53 KeyOrderViolation,
54
55 #[error("checksum mismatch")]
56 ChecksumMismatch,
57
58 #[error("FWOB core error: {0}")]
59 Core(#[from] fwob_core::FwobError),
60
61 #[error("I/O error: {0}")]
62 Io(#[from] std::io::Error),
63}