Skip to main content

clickhouse_utils/
error.rs

1#[derive(Debug)]
2#[must_use]
3pub struct ClickhouseUtilsError(
4    String,
5    Option<Box<dyn std::error::Error + Send + Sync + 'static>>,
6);
7
8pub type Result<T> = std::result::Result<T, ClickhouseUtilsError>;
9
10impl ClickhouseUtilsError {
11    pub fn new(message: String) -> Self {
12        ClickhouseUtilsError(message, None)
13    }
14
15    pub fn into_inner(self) -> Option<Box<dyn std::error::Error + Send + Sync + 'static>> {
16        self.1
17    }
18
19    pub fn message(&self) -> &str {
20        &self.0
21    }
22}
23
24impl std::fmt::Display for ClickhouseUtilsError {
25    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
26        write!(f, "ClickhouseUtils error: {}", self.0)
27    }
28}
29
30// We need to constrain the error to be Send + Sync + 'static to use it in eyre
31impl std::error::Error for ClickhouseUtilsError where ClickhouseUtilsError: Send + Sync + 'static {}
32
33impl From<std::io::Error> for ClickhouseUtilsError {
34    fn from(error: std::io::Error) -> Self {
35        ClickhouseUtilsError(format!("IO error: {}", error), Some(Box::new(error)))
36    }
37}
38
39impl From<clickhouse::error::Error> for ClickhouseUtilsError {
40    fn from(error: clickhouse::error::Error) -> Self {
41        ClickhouseUtilsError(
42            format!("Clickhouse error: {}", error),
43            Some(Box::new(error)),
44        )
45    }
46}
47
48impl From<std::time::SystemTimeError> for ClickhouseUtilsError {
49    fn from(error: std::time::SystemTimeError) -> Self {
50        ClickhouseUtilsError(
51            format!("System time error: {}", error),
52            Some(Box::new(error)),
53        )
54    }
55}