Skip to main content

easypdf_markdown/
markdown_warning.rs

1//! Markdown 转换警告。
2
3use easypdf_core::PageIndex;
4
5/// 不阻止转换完成的结构化警告。
6#[derive(Clone, Debug, PartialEq, Eq)]
7#[non_exhaustive]
8pub enum MarkdownWarning {
9    /// 页面没有可提取的原生文本。
10    EmptyPage {
11        /// 零基页索引。
12        page_index: PageIndex,
13    },
14    /// 当前后端尚不能执行表格检测。
15    TableDetectionUnavailable,
16    /// 请求了图片提取,但当前读取后端尚不能提取图片资产。
17    ImageExtractionUnavailable,
18    /// 请求了 OCR,但没有启用 OCR 实现。
19    OcrUnavailable {
20        /// 零基页索引。
21        page_index: PageIndex,
22    },
23    /// 管道中某个处理器执行失败(非 `fail_fast` 模式下收集)。
24    ProcessorFailed {
25        /// 错误描述。
26        message: String,
27    },
28}
29
30#[cfg(test)]
31#[allow(clippy::uninlined_format_args, clippy::float_cmp)]
32mod tests {
33    use super::*;
34    use easypdf_core::PageIndex;
35
36    #[test]
37    fn empty_page_variant() {
38        let w = MarkdownWarning::EmptyPage {
39            page_index: PageIndex::new(0),
40        };
41        let dbg = format!("{:?}", w);
42        assert!(dbg.contains("EmptyPage"));
43    }
44
45    #[test]
46    fn table_detection_unavailable_variant() {
47        let w = MarkdownWarning::TableDetectionUnavailable;
48        assert_eq!(format!("{:?}", w), "TableDetectionUnavailable");
49    }
50
51    #[test]
52    fn image_extraction_unavailable_variant() {
53        let w = MarkdownWarning::ImageExtractionUnavailable;
54        assert_eq!(format!("{:?}", w), "ImageExtractionUnavailable");
55    }
56
57    #[test]
58    fn ocr_unavailable_variant() {
59        let w = MarkdownWarning::OcrUnavailable {
60            page_index: PageIndex::new(2),
61        };
62        let dbg = format!("{:?}", w);
63        assert!(dbg.contains("OcrUnavailable"));
64    }
65
66    #[test]
67    fn processor_failed_variant() {
68        let w = MarkdownWarning::ProcessorFailed {
69            message: "test error".to_string(),
70        };
71        let dbg = format!("{:?}", w);
72        assert!(dbg.contains("ProcessorFailed"));
73        assert!(dbg.contains("test error"));
74    }
75
76    #[test]
77    fn clone_preserves() {
78        let w = MarkdownWarning::EmptyPage {
79            page_index: PageIndex::new(1),
80        };
81        let cloned = w.clone();
82        assert_eq!(w, cloned);
83    }
84
85    #[test]
86    fn partial_eq_works() {
87        let a = MarkdownWarning::TableDetectionUnavailable;
88        let b = MarkdownWarning::TableDetectionUnavailable;
89        let c = MarkdownWarning::ImageExtractionUnavailable;
90        assert_eq!(a, b);
91        assert_ne!(a, c);
92    }
93}