use std::{io, result};
use thiserror::Error;
#[derive(Error, Debug)]
pub enum Error {
#[error(transparent)]
Io(#[from] io::Error),
#[error(transparent)]
Mem(#[from] wram::Error),
#[error("偏移量未对齐: 偏移量 {offset} 不是扇区大小 {align} 的整数倍")]
UnalignedOffset { offset: u64, align: usize },
#[error("长度未对齐: 长度 {len} 不是扇区大小 {align} 的整数倍")]
UnalignedLen { len: usize, align: usize },
#[error("缓冲区内存未对齐: 指针地址 {ptr:#x} 不是扇区大小 {align} 的整数倍")]
UnalignedBuffer { ptr: usize, align: usize },
#[error("段不存在: 段编号 {0}")]
SegmentNotFound(u32),
#[error("访问越界: 偏移量 {offset}, 长度 {len}")]
OutOfBounds { offset: u64, len: usize },
#[error("无效扇区大小: 大小 {size}, 最小为 {min}")]
InvalidSectorSize { size: usize, min: usize },
#[error("无效段大小: 大小 {0} 必须大于 0、为 2 的幂且至少为扇区大小")]
InvalidSegmentSize(u64),
#[error("无效容量: {capacity} 必须为段大小的正整数倍")]
InvalidCapacity { capacity: u64 },
#[error("段编号超出范围: {0}")]
SegmentExceeded(u64),
#[error("读取提前结束 (EOF): 预期至少读取 {expected} 字节,实际仅读取 {actual} 字节")]
UnexpectedEof { expected: usize, actual: usize },
#[error("恢复校验失败: 段 {segment} 文件大小 {file_size} 超过配置段大小 {segment_size}")]
SegmentSizeMismatch {
segment: u32,
file_size: u64,
segment_size: u64,
},
#[error("设备处于只读模式,拒绝写操作: 偏移量 {offset}, 长度 {len}")]
ReadOnly { offset: u64, len: usize },
}
pub type Result<T> = result::Result<T, Error>;