Skip to main content

office_rs/error/
code.rs

1use chrono::Duration;
2
3use crate::OfficeError;
4
5#[derive(Debug, Clone, PartialEq, Eq, Hash)]
6pub enum ErrorCode {
7    /// 系统级错误(1000-1999)
8    System(SystemErrorCode),
9    /// 解析错误(2000-2999)
10    Parse(ParseErrorCode),
11    /// 数据格式错误(3000-3999)
12    Format(FormatErrorCode),
13    /// 文档特定错误(4000-6999)
14    Document(DocumentErrorCode),
15    /// 通用错误(9000-9999)
16    Common(CommonErrorCode),
17}
18
19/// 系统级错误码(1000-1999)
20#[derive(Debug, Clone, PartialEq, Eq, Hash)]
21pub enum SystemErrorCode {
22    /// 文件系统错误(1000-1099)
23    NotFound = 1001, // 文件未找到
24    PermissionDenied = 1002, // 权限不足
25    Corrupted = 1003, // 文件损坏
26
27    /// IO错误(1100-1199)
28    IoError = 1100, // 输入输出错误
29    ZipError = 1101, // 压缩文件错误
30    NetworkError = 1102, // 网络错误
31}
32
33/// 解析错误码(2000-2999)
34#[derive(Debug, Clone, PartialEq, Eq, Hash)]
35pub enum ParseErrorCode {
36    /// 数据解析错误(2000-2099)
37    Xml = 2001, // XML解析错误
38    Json = 2002, // JSON解析错误
39    Encoding = 2003, // 编码错误
40
41    /// 结构解析错误(2100-2199)
42    MissingElement = 2101, // 缺少必要元素
43    InvalidAttribute = 2102, // 无效属性
44    InvalidNamespace = 2103, // 无效命名空间
45    UnsupportedVersion = 2104, // 不支持的版本
46}
47
48/// 数据格式错误码(3000-3999)
49#[derive(Debug, Clone, PartialEq, Eq, Hash)]
50pub enum FormatErrorCode {
51    /// 通用格式错误(3000-3099)
52    InvalidFormat = 3001, // 无效的格式
53    UnsupportedFormat = 3002, // 不支持的格式
54    VersionMismatch = 3003, // 版本不匹配
55
56    /// 数据验证错误(3100-3199)
57    InvalidReference = 3101, // 无效引用
58    InvalidValue = 3102, // 无效值
59    OutOfRange = 3103, // 超出范围
60}
61
62/// 文档特定错误码(4000-6999)
63#[derive(Debug, Clone, PartialEq, Eq, Hash)]
64pub enum DocumentErrorCode {
65    /// Excel相关错误(4000-4999)
66    XlsxWorksheetNotFound = 4001, // 工作表未找到
67    XlsxInvalidCellReference = 4002, // 无效的单元格引用
68    XlsxInvalidFormula = 4003, // 无效的公式
69    XlsxInvalidStyle = 4004, // 无效的样式
70
71    /// Word相关错误(5000-5999)
72    DocxStyleNotFound = 5001, // 样式未找到
73    DocxInvalidTableStructure = 5002, // 无效的表格结构
74    DocxInvalidParagraph = 5003, // 无效的段落格式
75    DocxBookmarkNotFound = 5004, // 书签未找到
76
77    /// PowerPoint相关错误(6000-6999)
78    PptxInvalidPresentation = 6001, // 无效的演示文稿
79    PptxInvalidSlide = 6002, // 无效的幻灯片
80    PptxInvalidShape = 6003, // 无效的形状
81    PptxInvalidText = 6004, // 无效的文本
82}
83
84/// 通用错误码(9000-9999)
85#[derive(Debug, Clone, PartialEq, Eq, Hash)]
86pub enum CommonErrorCode {
87    /// 通用错误(9000-9099)
88    UnknownError = 9001, // 未知错误
89    NotImplemented = 9002, // 未实现的功能
90    InvalidOperation = 9003, // 无效的操作
91    Timeout = 9004, // 超时
92}
93
94/// 错误恢复建议
95#[derive(Debug, Clone)]
96pub struct RecoverySuggestion {
97    pub message: String,
98    pub action: RecoveryAction,
99}
100
101/// 负责定义可执行的恢复操作
102#[derive(Debug, Clone)]
103pub enum RecoveryAction {
104    /// 重试操作
105    Retry(u32),
106    /// 使用默认值
107    UseDefault,
108    /// 降级操作
109    Fallback(String),
110    /// 跳过当前元素
111    SkipElement,
112    /// 需要用户输入
113    UserInput(String),
114    /// 忽略错误
115    Ignore,
116    /// 无法恢复
117    None,
118}
119
120// 负责配置自动恢复策略
121pub struct RecoveryStrategy {
122    pub pattern: ErrorPattern, // 触发的错误模式
123    pub operation: RecoveryAction, // 执行的操作
124    pub max_attempts: u32, // 最大尝试次数
125    pub backoff: Duration, // 重试间隔
126}
127
128/// 错误发生模式
129pub enum ErrorPattern {
130    ContinuousFailure(u32), // 连续失败次数
131    PeriodicError(String), // 周期性错误标识
132    BurstError { // 突发错误
133        threshold: u32,
134        time_window: Duration,
135    },
136}