#![doc = include_str!("../README.md")]
#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
mod entry_iter;
mod store;
use std::io;
use bincode::{DefaultOptions, Options};
pub use entry_iter::*;
pub use store::*;
pub(crate) fn bincode_options() -> impl bincode::Options {
DefaultOptions::new().with_varint_encoding()
}
#[derive(Debug)]
pub enum StoreError {
Io(io::Error),
InvalidMagicBytes { got: Vec<u8>, expected: Vec<u8> },
Bincode(bincode::ErrorKind),
}
impl core::fmt::Display for StoreError {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
match self {
Self::Io(e) => write!(f, "io error trying to read file: {e}"),
Self::InvalidMagicBytes { got, expected } => write!(
f,
"file has invalid magic bytes: expected={expected:?} got={got:?}",
),
Self::Bincode(e) => write!(f, "bincode error while reading entry {e}"),
}
}
}
impl From<io::Error> for StoreError {
fn from(value: io::Error) -> Self {
Self::Io(value)
}
}
impl std::error::Error for StoreError {}