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>;