libp2p_webtransport_websys/
error.rs

1use wasm_bindgen::{JsCast, JsValue};
2
3/// Errors that may happen on the [`Transport`](crate::Transport) or the
4/// [`Connection`](crate::Connection).
5#[derive(thiserror::Error, Debug)]
6pub enum Error {
7    #[error("Invalid multiaddr: {0}")]
8    InvalidMultiaddr(&'static str),
9
10    #[error("Noise authentication failed")]
11    Noise(#[from] libp2p_noise::Error),
12
13    #[error("JavaScript error: {0}")]
14    #[allow(clippy::enum_variant_names)]
15    JsError(String),
16
17    #[error("JavaScript typecasting failed")]
18    JsCastFailed,
19
20    #[error("Unknown remote peer ID")]
21    UnknownRemotePeerId,
22}
23
24impl Error {
25    pub(crate) fn from_js_value(value: JsValue) -> Self {
26        let s = if value.is_instance_of::<js_sys::Error>() {
27            js_sys::Error::from(value)
28                .to_string()
29                .as_string()
30                .unwrap_or_else(|| "Unknown error".to_string())
31        } else {
32            "Unknown error".to_string()
33        };
34
35        Error::JsError(s)
36    }
37}