1 个不稳定版本

0.1.0 2023年7月9日

#757 in WebAssembly

MIT/Apache

8KB

derive(JsError)

允许在不需要单独API的情况下,从wasm_bindgen函数中返回错误。

动机

wasm_bindgen要求返回Result的函数必须是Result<T, JsError>Result<T, E> where E: Into<JsValue>。如果您希望将任何其他错误类型返回到JavaScript,建议有一个内部函数返回普通的Result,并且有一个公共API将函数的返回值包装成Result(请参阅此处的示例,在wasm_bindgen文档中)。然而,对于一个既有WASM构建又有标准库构建的库,这可能会创建一个冗余的API,包含多个仅封装内部函数的[<wasm_bindgen>]函数。

另一种解决方案是简单地为错误类型实现Into

impl From<ErrorType> for JsValue {
    fn from(error: Error) -> Self {
        JsError::from(error).into()
    }
}

这个crate只是简单地将这段代码封装成一个[derive(JsError)]宏,以便方便使用。

安装

使用cargo add安装

cargo add [email protected]

或者通过修改Cargo.toml

[dependencies]
derive_jserror = "0.1"

用法

使用thiserror的示例

use derive_jserror::JsError;
use wasm_bindgen::prelude::*;
use thiserror::Error;

#[derive(Error, JsError, Debug)]
#[error("test error type")]
struct TestError;

#[wasm_bindgen]
pub fn func_returns_result() -> Result<(), TestError> {
    Err(TestError)
}

许可证

根据您的选择,许可协议为Apache License (Version 2.0)或MIT license。

除非您明确说明,否则根据Apache-2.0许可证定义,您有意提交以包含在本crate中的任何贡献,均应按上述方式双授权,不得添加任何附加条款或条件。

依赖项

~0.7–1.4MB
~28K SLoC