3 个版本
0.1.3 | 2021 年 4 月 8 日 |
---|---|
0.1.2 | 2021 年 3 月 1 日 |
0.1.1 | 2021 年 1 月 26 日 |
#1903 在 Rust 模式
21KB
647 行
uptown_funk 是一个 crate,允许您优雅地定义与 Wasmtime 和 Wasmer 运行时兼容的 Wasm 主机函数。
它包含一个宏和一些结构体/特质,允许您将 Wasm 原始类型转换为高级 Rust 类型,反之亦然。
让我们通过一个使用 uptown_funk
的主机函数定义示例来看看。
#[host_functions(namespace = "wasi_snapshot_preview1")]
impl WasiState {
async fn fd_pread(&mut self, fd: u32, iovs: &mut [IoSliceMut<'_>], offset: Filesize) -> (Status, u32) {
// ...
}
// .. Other functions depending on the WasiState struct.
}
host_function
宏允许我们捕获任何主机端结构体并将其用作 Wasm 实例的状态。我们不必处理从 WebAssembly 客户端传递的低级指针+长度,我们可以 假装 收到高级 Rust 类型(例如 &mut [IoSliceMut<'_>]
),宏将为我们创建适当的包装器。当然,它与 Lunatic 上的 async
函数正确协同工作。
依赖项
~1.3–5.5MB
~108K SLoC