1 个稳定版本

新版本 24.0.0 2024 年 8 月 20 日

#1367WebAssembly

Download history 146/week @ 2024-08-15

149 每月下载量
用于 wasmtime-cli

Apache-2.0 WITH LLVM-exception

2.5MB
40K SLoC

Wasmtime 的 wasi-keyvalue 实现

这个 crate 提供了 Wasmtime 对 wasi-keyvalue API 的宿主实现。使用这个 crate,运行时可以运行调用 wasi-keyvalue API 的组件,并允许组件访问键值存储。

目前支持的存储后端

  • 内存中(空标识符)

示例

这个 crate 的使用方式与其他 WASI API 实现,如 wasi:cliwasi:http,非常相似。

一个常见的场景是在 wasi:cli 组件中访问 KV 存储。一个独立完成所有这些功能的示例看起来像

use wasmtime::{
    component::{Linker, ResourceTable},
    Config, Engine, Result, Store,
};
use wasmtime_wasi::{WasiCtx, WasiCtxBuilder, WasiView};
use wasmtime_wasi_keyvalue::{WasiKeyValue, WasiKeyValueCtx, WasiKeyValueCtxBuilder};

#[tokio::main]
async fn main() -> Result<()> {
    let mut config = Config::new();
    config.async_support(true);
    let engine = Engine::new(&config)?;

    let mut store = Store::new(&engine, Ctx {
        table: ResourceTable::new(),
        wasi_ctx: WasiCtxBuilder::new().build(),
        wasi_keyvalue_ctx: WasiKeyValueCtxBuilder::new().build(),
    });

    let mut linker = Linker::<Ctx>::new(&engine);
    wasmtime_wasi::add_to_linker_async(&mut linker)?;
    // add `wasi-runtime-config` world's interfaces to the linker
    wasmtime_wasi_keyvalue::add_to_linker(&mut linker, |h: &mut Ctx| {
        WasiKeyValue::new(&h.wasi_keyvalue_ctx, &mut h.table)
    })?;

    // ... use `linker` to instantiate within `store` ...

    Ok(())
}

struct Ctx {
    table: ResourceTable,
    wasi_ctx: WasiCtx,
    wasi_keyvalue_ctx: WasiKeyValueCtx,
}

impl WasiView for Ctx {
    fn table(&mut self) -> &mut ResourceTable { &mut self.table }
    fn ctx(&mut self) -> &mut WasiCtx { &mut self.wasi_ctx }
}

依赖项

~20–31MB
~594K SLoC