dm_database_driver_log/
error.rs1use thiserror::Error;
2
3#[derive(Debug, Clone, PartialEq, Eq, Error)]
8pub enum ParseError {
9 #[error("invalid format at line {line_number}, offset {offset}: {what} | raw: {raw}")]
10 InvalidFormat {
11 raw: String,
12 line_number: u64,
13 offset: usize,
14 what: &'static str,
15 },
16 #[error("IO error: {0}")]
17 IoError(String),
18}
19
20impl ParseError {
21 #[cfg(any(feature = "jdbc", feature = "dm-provider"))]
22 pub(crate) fn invalid(offset: usize, what: &'static str) -> Self {
23 Self::InvalidFormat {
24 raw: String::new(),
25 line_number: 0,
26 offset,
27 what,
28 }
29 }
30
31 pub(crate) fn with_context(mut self, raw: &str, line_number: u64) -> Self {
32 if let Self::InvalidFormat {
33 raw: saved,
34 line_number: saved_line,
35 ..
36 } = &mut self
37 {
38 if saved.is_empty() {
39 *saved = raw.to_owned();
40 }
41 *saved_line = line_number;
42 }
43 self
44 }
45
46 pub fn line_number(&self) -> Option<u64> {
47 match self {
48 Self::InvalidFormat { line_number: 0, .. } => None,
49 Self::InvalidFormat { line_number, .. } => Some(*line_number),
50 Self::IoError(_) => None,
51 }
52 }
53
54 pub fn offset(&self) -> Option<usize> {
55 match self {
56 Self::InvalidFormat { offset, .. } => Some(*offset),
57 Self::IoError(_) => None,
58 }
59 }
60}