dm_database_parser_sqllog/
error.rs

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