docx_handlebars/
errors.rs

1//! 错误类型定义
2
3use thiserror::Error;
4
5/// DOCX 处理错误类型
6#[derive(Error, Debug)]
7pub enum DocxError {
8    #[error("无效的 DOCX 文件格式:文件不是有效的 ZIP 文件")]
9    InvalidZipFormat,
10    #[error("文件大小不足:文件太小,不是有效的 ZIP 文件(需要至少 22 字节)")]
11    FileTooSmall,
12    #[error("无效的 ZIP 签名:文件开头不是有效的 ZIP 文件签名")]
13    InvalidZipSignature,
14    #[error("缺少必需的 DOCX 文件:{0}")]
15    MissingRequiredFile(String),
16    #[error("ZIP 文件读取错误:{0}")]
17    ZipReadError(String),
18    #[error("IO 错误:{0}")]
19    IoError(#[from] std::io::Error),
20    #[error("模板处理错误:{0}")]
21    TemplateError(String),
22}
23
24#[cfg(test)]
25mod tests {
26    use super::*;
27
28    #[test]
29    fn test_docx_error_display() {
30        // 测试错误信息的显示
31        let file_too_small = DocxError::FileTooSmall;
32        assert_eq!(
33            file_too_small.to_string(),
34            "文件大小不足:文件太小,不是有效的 ZIP 文件(需要至少 22 字节)"
35        );
36        
37        let invalid_signature = DocxError::InvalidZipSignature;
38        assert_eq!(
39            invalid_signature.to_string(),
40            "无效的 ZIP 签名:文件开头不是有效的 ZIP 文件签名"
41        );
42        
43        let missing_file = DocxError::MissingRequiredFile("word/document.xml".to_string());
44        assert_eq!(
45            missing_file.to_string(),
46            "缺少必需的 DOCX 文件:word/document.xml"
47        );
48        
49        let template_error = DocxError::TemplateError("测试错误".to_string());
50        assert_eq!(
51            template_error.to_string(),
52            "模板处理错误:测试错误"
53        );
54    }
55}