use std::io;
use thiserror::Error;
pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, Error)]
pub enum Error {
#[error("i/o error: {0}")]
Io(#[from] io::Error),
#[error("file size {size} is not a multiple of page size {page_size}")]
NotPageAligned {
size: u64,
page_size: usize,
},
#[error("file too small for a page store ({size} bytes)")]
TooSmall {
size: u64,
},
#[error("page {page} out of range (store has {total} pages)")]
PageOutOfRange {
page: u64,
total: u64,
},
#[error("bad superblock magic: 0x{got:08X} (want 0x{want:08X})")]
BadMagic {
got: u32,
want: u32,
},
#[error("crc mismatch on page {page}: stored 0x{stored:08X}, computed 0x{computed:08X}")]
BadCrc {
page: u64,
stored: u32,
computed: u32,
},
#[error("bad page trailer on page {page}: reserved bytes non-zero")]
BadTrailer {
page: u64,
},
}