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(())
}