use std::io;
pub type PageResult<T> = Result<T, PageError>;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum PageError {
#[error("page i/o error: {0}")]
Io(#[from] io::Error),
#[error(
"invalid page size {size}: must be a power of two in {min}..={max}",
min = crate::MIN_PAGE_SIZE,
max = crate::MAX_PAGE_SIZE
)]
InvalidPageSize {
size: usize,
},
#[error("bad page magic: found {found:#010x}, expected {expected:#010x}")]
BadMagic {
found: u32,
expected: u32,
},
#[error("unsupported page format version {found} (this build writes {supported})")]
UnsupportedVersion {
found: u16,
supported: u16,
},
#[error(
"checksum mismatch on page {page_id}: stored {stored:#010x}, computed {computed:#010x}"
)]
ChecksumMismatch {
page_id: u64,
stored: u32,
computed: u32,
},
#[error("misdirected page: slot {requested} holds a page stamped {found}")]
MisdirectedPage {
requested: u64,
found: u64,
},
#[error("short read on page {page_id}: got {got} of {page_size} bytes")]
ShortRead {
page_id: u64,
got: usize,
page_size: usize,
},
#[error("buffer pool exhausted: all {capacity} frames are pinned")]
BufferPoolExhausted {
capacity: usize,
},
#[error("invalid page id to free: {page_id}")]
InvalidPageId {
page_id: u64,
},
#[error("page 0 is not a valid allocator superblock")]
InvalidSuperblock,
}