pub type Result<T> = std::result::Result<T, Error>;
#[derive(Debug, thiserror::Error)]
#[non_exhaustive]
pub enum Error {
#[error("i/o error: {0}")]
Io(#[from] std::io::Error),
#[error("corrupt page {page_no}: checksum mismatch")]
CorruptPage {
page_no: u64,
},
#[error("not an EmbedMind file (bad magic or malformed header)")]
BadHeader,
#[error(
"unsupported format version {found} (this build reads up to {supported}); run `embedmind migrate` with a newer build"
)]
UnsupportedVersion {
found: u32,
supported: u32,
},
#[error("file is encrypted; this build does not support encrypted files")]
Encrypted,
#[error("another process is writing to this file (single-writer; see docs/adr/0006)")]
WriteLocked,
#[error("page {page_no} is out of bounds (page_count {page_count})")]
PageOutOfBounds {
page_no: u64,
page_count: u64,
},
#[error("invalid argument: {0}")]
InvalidArgument(&'static str),
#[error("malformed {what} on page {page_no}")]
MalformedPage {
page_no: u64,
what: &'static str,
},
#[error("malformed memory record: {0}")]
MalformedRecord(&'static str),
#[error("internal engine error: {0} (please report this)")]
Internal(&'static str),
}