office-rs 0.1.1

A Rust library for reading and writing XML Office files
Documentation
use chrono::Duration;

use crate::OfficeError;

#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ErrorCode {
    /// 系统级错误(1000-1999)
    System(SystemErrorCode),
    /// 解析错误(2000-2999)
    Parse(ParseErrorCode),
    /// 数据格式错误(3000-3999)
    Format(FormatErrorCode),
    /// 文档特定错误(4000-6999)
    Document(DocumentErrorCode),
    /// 通用错误(9000-9999)
    Common(CommonErrorCode),
}

/// 系统级错误码(1000-1999)
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum SystemErrorCode {
    /// 文件系统错误(1000-1099)
    NotFound = 1001, // 文件未找到
    PermissionDenied = 1002, // 权限不足
    Corrupted = 1003, // 文件损坏

    /// IO错误(1100-1199)
    IoError = 1100, // 输入输出错误
    ZipError = 1101, // 压缩文件错误
    NetworkError = 1102, // 网络错误
}

/// 解析错误码(2000-2999)
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum ParseErrorCode {
    /// 数据解析错误(2000-2099)
    Xml = 2001, // XML解析错误
    Json = 2002, // JSON解析错误
    Encoding = 2003, // 编码错误

    /// 结构解析错误(2100-2199)
    MissingElement = 2101, // 缺少必要元素
    InvalidAttribute = 2102, // 无效属性
    InvalidNamespace = 2103, // 无效命名空间
    UnsupportedVersion = 2104, // 不支持的版本
}

/// 数据格式错误码(3000-3999)
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum FormatErrorCode {
    /// 通用格式错误(3000-3099)
    InvalidFormat = 3001, // 无效的格式
    UnsupportedFormat = 3002, // 不支持的格式
    VersionMismatch = 3003, // 版本不匹配

    /// 数据验证错误(3100-3199)
    InvalidReference = 3101, // 无效引用
    InvalidValue = 3102, // 无效值
    OutOfRange = 3103, // 超出范围
}

/// 文档特定错误码(4000-6999)
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum DocumentErrorCode {
    /// Excel相关错误(4000-4999)
    XlsxWorksheetNotFound = 4001, // 工作表未找到
    XlsxInvalidCellReference = 4002, // 无效的单元格引用
    XlsxInvalidFormula = 4003, // 无效的公式
    XlsxInvalidStyle = 4004, // 无效的样式

    /// Word相关错误(5000-5999)
    DocxStyleNotFound = 5001, // 样式未找到
    DocxInvalidTableStructure = 5002, // 无效的表格结构
    DocxInvalidParagraph = 5003, // 无效的段落格式
    DocxBookmarkNotFound = 5004, // 书签未找到

    /// PowerPoint相关错误(6000-6999)
    PptxInvalidPresentation = 6001, // 无效的演示文稿
    PptxInvalidSlide = 6002, // 无效的幻灯片
    PptxInvalidShape = 6003, // 无效的形状
    PptxInvalidText = 6004, // 无效的文本
}

/// 通用错误码(9000-9999)
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum CommonErrorCode {
    /// 通用错误(9000-9099)
    UnknownError = 9001, // 未知错误
    NotImplemented = 9002, // 未实现的功能
    InvalidOperation = 9003, // 无效的操作
    Timeout = 9004, // 超时
}

/// 错误恢复建议
#[derive(Debug, Clone)]
pub struct RecoverySuggestion {
    pub message: String,
    pub action: RecoveryAction,
}

/// 负责定义可执行的恢复操作
#[derive(Debug, Clone)]
pub enum RecoveryAction {
    /// 重试操作
    Retry(u32),
    /// 使用默认值
    UseDefault,
    /// 降级操作
    Fallback(String),
    /// 跳过当前元素
    SkipElement,
    /// 需要用户输入
    UserInput(String),
    /// 忽略错误
    Ignore,
    /// 无法恢复
    None,
}

// 负责配置自动恢复策略
pub struct RecoveryStrategy {
    pub pattern: ErrorPattern, // 触发的错误模式
    pub operation: RecoveryAction, // 执行的操作
    pub max_attempts: u32, // 最大尝试次数
    pub backoff: Duration, // 重试间隔
}

/// 错误发生模式
pub enum ErrorPattern {
    ContinuousFailure(u32), // 连续失败次数
    PeriodicError(String), // 周期性错误标识
    BurstError { // 突发错误
        threshold: u32,
        time_window: Duration,
    },
}