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("键长度超出 u32 上限: {0}")]
KeyLengthOverflow(usize),
#[error("值长度超出 u32 上限: {0}")]
ValueLengthOverflow(usize),
#[error("编码总大小溢出 usize 寻址空间")]
RecordSizeOverflow,
#[error("非法或未知的键标签字节: {0:#x}")]
InvalidKeyTag(u8),
#[error("非法或未知的集合类型字节: {0:#x}")]
InvalidCollectionType(u8),
#[error("非法或未知的存储编码字节: {0:#x}")]
InvalidStorageEncoding(u8),
#[error("紧凑集合元素数量超出 u16 上限: {0}")]
CompactCountOverflow(usize),
#[error("紧凑编码数据损坏: {0}")]
CorruptedCompactData(&'static str),
#[error("参数非法: {0}")]
InvalidArgument(&'static str),
#[error("变长整型编码非规范或存在冗余/非法前缀")]
NonCanonicalEncoding,
}
#[derive(Error, Debug)]
#[error("bitcode 编解码失败: {0}")]
pub struct BitcodeError(#[from] bitcode::Error);
pub type Result<T> = result::Result<T, Error>;
pub type BitcodeResult<T> = result::Result<T, BitcodeError>;