add_to_linker

Function add_to_linker 

Source
pub fn add_to_linker<T>(linker: &mut Linker<T>) -> Result<()>
where T: WasiClocksView + 'static,
Available on crate feature p3 only.
Expand description

Add all WASI interfaces from this module into the linker provided.

This function will add all interfaces implemented by this module to the Linker, which corresponds to the wasi:clocks/imports world supported by this module.

This is low-level API for advanced use cases, wasmtime_wasi::p3::add_to_linker can be used instead to add all wasip3 interfaces (including the ones from this module) to the linker.

ยงExample

use wasmtime::{Engine, Result, Store, Config};
use wasmtime::component::{Linker, ResourceTable};
use wasmtime_wasi::clocks::{WasiClocksView, WasiClocksCtxView, WasiClocksCtx};

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

    let mut linker = Linker::<MyState>::new(&engine);
    wasmtime_wasi::p3::clocks::add_to_linker(&mut linker)?;
    // ... add any further functionality to `linker` if desired ...

    let mut store = Store::new(
        &engine,
        MyState::default(),
    );

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

    Ok(())
}

#[derive(Default)]
struct MyState {
    clocks: WasiClocksCtx,
    table: ResourceTable,
}

impl WasiClocksView for MyState {
    fn clocks(&mut self) -> WasiClocksCtxView {
        WasiClocksCtxView { ctx: &mut self.clocks, table: &mut self.table }
    }
}