use std::{io, result};
use thiserror::Error;
use crate::range_index::RangeIndexError;
#[derive(Error, Debug)]
pub enum Error {
#[error(transparent)]
Device(#[from] wdev::Error),
#[error(transparent)]
Epoch(#[from] wepoch::Error),
#[error(transparent)]
HLog(#[from] whlog::Error),
#[error(transparent)]
Index(#[from] windex::Error),
#[error(transparent)]
Record(#[from] wrecord::Error),
#[error(transparent)]
Value(#[from] wval::Error),
#[error(transparent)]
Mem(#[from] wbase::Error),
#[error("配置错误: {0}")]
InvalidConfig(String),
#[error(
"index_size 配置与实际索引容量不一致: 配置 {config} 桶, 实际 {actual} 桶; 索引打开时按容量定表且运行期无在线扩容, 恢复组件装配禁止缩表或漂移, 请将 index_size 设为 {actual} 与索引快照一致, 或全新建库"
)]
IndexSizeMismatch {
config: usize,
actual: usize,
},
#[error(transparent)]
Io(#[from] io::Error),
#[error(transparent)]
BfTree(#[from] wbftree::Error),
#[error(transparent)]
RangeIndex(#[from] RangeIndexError),
#[error(transparent)]
Compact(#[from] wcompact::Error),
#[error(transparent)]
Cpr(#[from] wcpr::Error),
}
pub type Result<T> = result::Result<T, Error>;