gloo_net/
error.rs

1use gloo_utils::errors::JsError;
2use thiserror::Error as ThisError;
3
4/// All the errors returned by this crate.
5#[derive(Debug, ThisError)]
6pub enum Error {
7    /// Error returned by JavaScript.
8    #[error("{0}")]
9    JsError(JsError),
10    /// Error returned by `serde` during deserialization.
11    #[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 returned by this crate
20    #[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}