fwob-v1 1.5.2

Reader, writer, verifier, and editor for the FWOB v1 binary format
Documentation
mod core_api;
mod editor;
mod header;
mod metadata;
mod mutation;
mod reader;
mod verifier;
mod writer;

pub use core_api::{
    create_writer as create_core_writer, open_reader as open_core_reader,
    open_writer as open_core_writer, MaintenanceService,
};
pub use editor::InMemoryEditor;
pub use header::{Header, HEADER_LEN, SIGNATURE, VERSION};
pub use metadata::update_metadata;
pub use mutation::delete_frame_ranges;
pub use reader::Reader;
pub use verifier::{repair_committed_tail, verify_file, VerificationReport};
pub use writer::{Writer, WriterOptions};

use thiserror::Error;

pub type Result<T> = std::result::Result<T, V1Error>;

#[derive(Debug, Error)]
pub enum V1Error {
    #[error("corrupted FWOB v1 header")]
    CorruptedHeader,

    #[error("frame type mismatch: expected {expected}, found {actual}")]
    FrameTypeMismatch { expected: String, actual: String },

    #[error("corrupted file length: expected {expected}, actual {actual}")]
    CorruptedFileLength { expected: u64, actual: u64 },

    #[error("corrupted string table length: expected {expected}, actual {actual}")]
    CorruptedStringTableLength { expected: u32, actual: u64 },

    #[error("key order violation at frame {index}")]
    KeyOrderViolation { index: u64 },

    #[error("key field index {0} is out of range")]
    KeyFieldIndexOutOfRange(usize),

    #[error("string table out of space: required {required}, preserved {preserved}")]
    StringTableOutOfSpace { required: u32, preserved: u32 },

    #[error("FWOB core error: {0}")]
    Core(#[from] fwob_core::FwobError),

    #[error("I/O error: {0}")]
    Io(#[from] std::io::Error),
}