dm_database_parser_sqllog/
error.rs

1//! 错误类型定义
2//!
3//! 定义了解析过程中可能出现的所有错误类型。
4//!
5//! # 用法说明
6//!
7//! ParseError 仅作为库 API 的错误返回类型,普通用户无需手动构造。
8
9use thiserror::Error;
10
11/// 解析错误类型
12///
13/// 包含了 SQL 日志解析过程中可能遇到的所有错误情况。
14/// 所有错误都包含原始输入数据以便于调试。
15#[derive(Debug, Clone, PartialEq, Error)]
16pub enum ParseError {
17    /// 通用的格式错误
18    #[error("invalid format | raw: {raw}")]
19    InvalidFormat {
20        /// 原始输入数据
21        raw: String,
22    },
23
24    /// 文件未找到或无法访问
25    #[error("file not found or inaccessible: {path}")]
26    FileNotFound {
27        /// 文件路径
28        path: String,
29    },
30
31    /// 输入为空
32    #[error("empty input: no lines provided")]
33    EmptyInput,
34
35    /// 无效的记录起始行
36    #[error("invalid record start line: line does not match expected format | raw: {raw}")]
37    InvalidRecordStartLine {
38        /// 原始行内容
39        raw: String,
40    },
41
42    /// 行长度不足
43    #[error("line too short: expected at least 25 characters, got {length} | raw: {raw}")]
44    LineTooShort {
45        /// 实际长度
46        length: usize,
47        /// 原始行内容
48        raw: String,
49    },
50
51    /// Meta 部分缺少右括号
52    #[error("missing closing parenthesis in meta section | raw: {raw}")]
53    MissingClosingParen {
54        /// 原始行内容
55        raw: String,
56    },
57
58    /// Meta 字段数量不足
59    #[error("insufficient meta fields: expected at least 5 fields, got {count} | raw: {raw}")]
60    InsufficientMetaFields {
61        /// 实际字段数量
62        count: usize,
63        /// 原始 meta 内容
64        raw: String,
65    },
66
67    /// EP 字段格式错误
68    #[error("invalid EP format: expected 'EP[number]', got '{value}' | raw: {raw}")]
69    InvalidEpFormat {
70        /// EP 字段值
71        value: String,
72        /// 原始 meta 内容
73        raw: String,
74    },
75
76    /// EP 数字解析失败
77    #[error("failed to parse EP number: {value} | raw: {raw}")]
78    EpParseError {
79        /// EP 数字值
80        value: String,
81        /// 原始 meta 内容
82        raw: String,
83    },
84
85    /// 字段格式不匹配
86    #[error("invalid field format: expected '{expected}', got '{actual}' | raw: {raw}")]
87    InvalidFieldFormat {
88        /// 期望的前缀
89        expected: String,
90        /// 实际的字段内容
91        actual: String,
92        /// 原始 meta 内容
93        raw: String,
94    },
95
96    /// 整数解析失败
97    #[error("failed to parse {field} as integer: {value} | raw: {raw}")]
98    IntParseError {
99        /// 字段名
100        field: String,
101        /// 字段值
102        value: String,
103        /// 原始内容
104        raw: String,
105    },
106
107    /// Indicators 解析失败
108    #[error("failed to parse indicators: {reason} | raw: {raw}")]
109    IndicatorsParseError {
110        /// 失败原因
111        reason: String,
112        /// 原始 body 内容
113        raw: String,
114    },
115
116    /// IO 操作错误
117    #[error("IO error: {0}")]
118    IoError(String),
119}