use thiserror::Error;

#[derive(Error, Debug)]
pub enum PEParseError {
    #[error("无效的DOSMagic值")]
    InvalidDOSMagic,
    #[error("Invalid NT header signature")]
    InvalidNTSignature,
    #[error("Invalid optional header magic number")]
    InvalidOptionalMagic,
    #[error("Invalid optional header size")]
    InvalidOptionalSize,
    #[error("解析超出了文件范围")]
    OutOfBounds,
    #[error("错误的RVA: {0}")]
    RvaToFoaError(u32),
    #[error("RVA对应的是一个空节区数据！RVA: {0}")]
    RvaToEmptySection(u32),
    #[error("错误的数据目录索引")]
    InvalidDataDirectoryIndex,
}
/// PE操作的错误
#[derive(Error, Debug)]
pub enum MutablePEError {
    // 兼容PE解析错误
    #[error(transparent)]
    PEParseError(#[from] PEParseError),
    // 头部映射无法扩容，超出最大可扩容范围
    #[error("头部映射无法扩容, 需要扩容大小:{0:#X},超过了最大可扩容范围:{1:#X}")]
    CannotExpandHeader(u32, u32),

    // 文件大小不足，无法扩容
    #[error("文件大小不足，无法扩容! 需要的大小:{0:#X}, 当前的文件大小:{1:#X}")]
    CannotExpandFileSize(u32, u32),

}
