Struct wasm_bindgen::JsError
source · pub struct JsError { /* private fields */ }
Expand description
Convenience type for use on exported fn() -> Result<T, JsError>
functions, where you wish to
throw a JavaScript Error
object.
You can get wasm_bindgen to throw basic errors by simply returning
Err(JsError::new("message"))
from such a function.
For more complex error handling, JsError
implements From<T> where T: std::error::Error
by
converting it to a string, so you can use it with ?
. Many Rust error types already do this,
and you can use thiserror
to derive Display
implementations easily or use any number of boxed error types that implement it already.
To allow JavaScript code to catch only your errors, you may wish to add a subclass of Error
in a JS module, and then implement Into<JsValue>
directly on a type and instantiate that
subclass. In that case, you would not need JsError
at all.
Basic example
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn throwing_function() -> Result<(), JsError> {
Err(JsError::new("message"))
}
Complex Example
use wasm_bindgen::prelude::*;
#[derive(Debug, Clone)]
enum MyErrorType {
SomeError,
}
use core::fmt;
impl std::error::Error for MyErrorType {}
impl fmt::Display for MyErrorType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "display implementation becomes the error message")
}
}
fn internal_api() -> Result<(), MyErrorType> {
Err(MyErrorType::SomeError)
}
#[wasm_bindgen]
pub fn throwing_function() -> Result<(), JsError> {
internal_api()?;
Ok(())
}
Implementations§
Trait Implementations§
Auto Trait Implementations§
impl RefUnwindSafe for JsError
impl !Send for JsError
impl !Sync for JsError
impl Unpin for JsError
impl UnwindSafe for JsError
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> ReturnWasmAbi for Twhere
T: IntoWasmAbi,
impl<T> ReturnWasmAbi for Twhere T: IntoWasmAbi,
§type Abi = <T as IntoWasmAbi>::Abi
type Abi = <T as IntoWasmAbi>::Abi
IntoWasmAbi::Abi
source§fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
fn return_abi(self) -> <T as ReturnWasmAbi>::Abi
IntoWasmAbi::into_abi
, except that it may throw and never
return in the case of Err
.