Skip to main content

hafas_rs/
error.rs

1#[cfg(feature = "backtrace")]
2use std::backtrace::Backtrace;
3use thiserror::Error as ThisError;
4#[cfg(feature = "js-error")]
5use wasm_bindgen::JsValue;
6
7#[derive(ThisError, Debug)]
8pub enum ParseError {
9    #[error("{info}")]
10    InvalidData {
11        #[cfg(feature = "backtrace")]
12        backtrace: Backtrace,
13        info: String,
14    },
15    #[error("source")]
16    Chrono {
17        #[cfg(feature = "backtrace")]
18        backtrace: Backtrace,
19        #[from]
20        source: chrono::ParseError,
21    },
22    #[error("source")]
23    Int {
24        #[cfg(feature = "backtrace")]
25        backtrace: Backtrace,
26        #[from]
27        source: std::num::ParseIntError,
28    },
29}
30
31impl From<String> for ParseError {
32    fn from(info: String) -> ParseError {
33        ParseError::InvalidData {
34            info,
35            #[cfg(feature = "backtrace")]
36            backtrace: Backtrace::capture(),
37        }
38    }
39}
40
41impl From<&str> for ParseError {
42    fn from(info: &str) -> ParseError {
43        ParseError::InvalidData {
44            info: info.to_string(),
45            #[cfg(feature = "backtrace")]
46            backtrace: Backtrace::capture(),
47        }
48    }
49}
50
51#[cfg(feature = "js-error")]
52#[derive(Debug)]
53pub struct JsError {
54    inner: JsValue,
55}
56#[cfg(feature = "js-error")]
57impl std::fmt::Display for JsError {
58    fn fmt(&self, fmt: &mut std::fmt::Formatter) -> std::result::Result<(), std::fmt::Error> {
59        todo!()
60    }
61}
62#[cfg(feature = "js-error")]
63impl std::error::Error for JsError {}
64#[cfg(feature = "js-error")]
65impl From<JsValue> for JsError {
66    fn from(inner: JsValue) -> Self {
67        Self { inner }
68    }
69}
70
71#[derive(ThisError, Debug)]
72pub enum Error {
73    #[error("{source}")]
74    Json {
75        #[cfg(feature = "backtrace")]
76        backtrace: Backtrace,
77        #[from]
78        source: serde_json::Error,
79    },
80    #[cfg(feature = "hyper-requester")]
81    #[error("{source}")]
82    Http {
83        #[cfg(feature = "backtrace")]
84        backtrace: Backtrace,
85        #[from]
86        source: hyper::Error,
87    },
88    #[cfg(feature = "js-fetch-requester")]
89    #[error("{source}")]
90    Js {
91        #[from]
92        source: JsError,
93    },
94    #[error("{source}")]
95    Parse {
96        #[cfg_attr(feature = "backtrace", backtrace)]
97        #[from]
98        source: ParseError,
99    },
100    #[error("{text}")]
101    Hafas { code: String, text: String },
102    #[error("{0}")]
103    InvalidInput(String),
104}
105
106pub type Result<T> = std::result::Result<T, Error>;
107pub type ParseResult<T> = std::result::Result<T, ParseError>;