use std::result;
use thiserror::Error;
#[derive(Error, Debug, Clone, Copy, PartialEq, Eq)]
pub enum Error {
#[error("缓冲区长度不足: 期望至少 {expected} 字节,实际仅 {actual} 字节")]
BufferTooShort { expected: usize, actual: usize },
#[error("逻辑地址超出 48 位限制 (最大 256TB): {0:#x}")]
AddressOverflow(u64),
#[error("键长度超出 u32 上限: {0}")]
KeyLengthOverflow(usize),
#[error("值长度超出 u32 上限: {0}")]
ValueLengthOverflow(usize),
#[error("记录总大小溢出 usize 寻址空间")]
RecordSizeOverflow,
#[error("原位更新值长度不匹配: 期望 {expected} 字节,实际 {actual} 字节")]
ValueLengthMismatch { expected: usize, actual: usize },
#[error("非法或未知的键标签字节: {0:#x}")]
InvalidKeyTag(u8),
#[error("非法或未知的集合类型字节: {0:#x}")]
InvalidCollectionType(u8),
#[error("紧凑集合元素数量超出 u16 上限: {0}")]
CompactCountOverflow(usize),
#[error("紧凑编码数据损坏: {0}")]
CorruptedCompactData(&'static str),
#[error("变长整型编码非规范或存在冗余/非法前缀")]
NonCanonicalEncoding,
#[error("bitcode 编解码失败: {0}")]
BitcodeDecode(&'static str),
}
impl From<bitcode::Error> for Error {
#[inline]
fn from(_: bitcode::Error) -> Self {
Self::BitcodeDecode("bitcode 数据反序列化失败")
}
}
pub type Result<T> = result::Result<T, Error>;