//! 邮箱错误枚举 (Rust 端额外提供)
//!
//! 对齐 C# 侧的 `MailboxException` 语义, 但 Rust 采用 `Result<T, MailboxError>`
//! 范式, 由 `thiserror` 生成 Display + Error 实现.
//! (Cargo.toml 已包含 `thiserror = "2"`, 因此启用 derive 版本.)

use thiserror::Error;

/// 邮箱协议错误.
#[derive(Error, Debug)]
pub enum MailboxError {
    /// 邮箱事务超时
    #[error("Mailbox timeout on slave {slave}")]
    Timeout { slave: u16 },

    /// 邮箱事务被取消
    #[error("Mailbox cancelled")]
    Cancelled,

    /// 邮箱协议层错误 (对端返回 MBX ERROR / 类型不匹配等)
    #[error("Mailbox protocol error on slave {slave}: code 0x{error_code:X}")]
    Protocol { slave: u16, error_code: u32 },

    /// CoE SDO 中止码
    #[error("SDO abort on slave {slave}: 0x{abort_code:08X}")]
    CoEAbort { slave: u16, abort_code: u32 },

    /// FoE 错误
    #[error("FoE error on slave {slave}: code 0x{error_code:X}")]
    FoEError { slave: u16, error_code: u32 },

    /// 无效参数
    #[error("Invalid argument")]
    InvalidArgument,

    /// 其它错误 (携带描述字符串)
    #[error("Unknown error: {0}")]
    Other(String),
}

/// 邮箱协议结果类型别名
pub type MailboxResult<T> = Result<T, MailboxError>;
