xwt_web/
error_as_error_code.rs

1//! [`xwt_core::stream::ErrorAsErrorCode`] implementations.
2
3use wasm_bindgen::JsCast as _;
4
5use crate::{Error, StreamReadError, StreamWriteError};
6
7impl xwt_core::stream::ErrorAsErrorCode for Error {
8    fn as_error_code(&self) -> Option<xwt_core::stream::ErrorCode> {
9        let error: &web_wt_sys::WebTransportError = self.0.dyn_ref()?;
10        if error.source() != web_wt_sys::WebTransportErrorSource::Stream {
11            return None;
12        }
13        let code = error.stream_error_code()?;
14        Some(code)
15    }
16}
17impl xwt_core::stream::ErrorAsErrorCode for StreamReadError {
18    fn as_error_code(&self) -> Option<xwt_core::stream::ErrorCode> {
19        match self {
20            Self::ByobReadConsumedBuffer => None,
21            Self::Closed => Some(0),
22            Self::Read(error) => error.as_error_code(),
23        }
24    }
25}
26
27impl xwt_core::stream::ErrorAsErrorCode for StreamWriteError {
28    fn as_error_code(&self) -> Option<xwt_core::stream::ErrorCode> {
29        match self {
30            Self::ZeroSizeWriteBuffer => None,
31            Self::Write(error) => error.as_error_code(),
32        }
33    }
34}