1use gloo_utils::errors::JsError;
2use thiserror::Error as ThisError;
3
4#[derive(Debug, ThisError)]
6pub enum Error {
7 #[error("{0}")]
9 JsError(JsError),
10 #[cfg(feature = "json")]
12 #[cfg_attr(docsrs, doc(cfg(feature = "json")))]
13 #[error("{0}")]
14 SerdeError(
15 #[source]
16 #[from]
17 serde_json::Error,
18 ),
19 #[error("{0}")]
21 GlooError(String),
22}
23
24#[cfg(any(feature = "http", feature = "websocket", feature = "eventsource"))]
25pub(crate) use conversion::*;
26#[cfg(any(feature = "http", feature = "websocket", feature = "eventsource"))]
27mod conversion {
28 use gloo_utils::errors::JsError;
29 use std::convert::TryFrom;
30 use wasm_bindgen::JsValue;
31
32 #[cfg(feature = "http")]
33 pub(crate) fn js_to_error(js_value: JsValue) -> super::Error {
34 super::Error::JsError(js_to_js_error(js_value))
35 }
36
37 pub(crate) fn js_to_js_error(js_value: JsValue) -> JsError {
38 match JsError::try_from(js_value) {
39 Ok(error) => error,
40 Err(_) => unreachable!("JsValue passed is not an Error type -- this is a bug"),
41 }
42 }
43}