1use wasm_bindgen::prelude::*;
2
3#[derive(Clone, Debug, thiserror::Error)]
5pub enum Error {
6 #[error("webtransport session error: {0:?}")]
7 Session(web_sys::WebTransportError),
8
9 #[error("webtransport stream error: {0:?}")]
10 Stream(web_sys::WebTransportError),
11
12 #[error("web streams error: {0:?}")]
13 Streams(#[from] web_streams::Error),
14
15 #[error("unknown error: {0:?}")]
16 Unknown(JsValue),
17}
18
19impl Error {
20 pub fn code(&self) -> Option<u8> {
22 match self {
23 Error::Session(e) | Error::Stream(e) => e.stream_error_code(),
24 _ => None,
25 }
26 }
27}
28
29impl From<JsValue> for Error {
30 fn from(v: JsValue) -> Self {
32 if let Some(e) = v.dyn_ref::<web_sys::WebTransportError>().cloned() {
33 match e.source() {
34 web_sys::WebTransportErrorSource::Stream => Error::Stream(e),
35 web_sys::WebTransportErrorSource::Session => Error::Session(e),
36 _ => Error::Unknown(v),
37 }
38 } else {
39 Error::Unknown(v)
40 }
41 }
42}