Struct wasmtime_wasi::bindings::Command
source · pub struct Command { /* private fields */ }
Expand description
Asynchronous bindings to execute and run a wasi:cli/command
.
This structure is automatically generated by bindgen!
and is intended to
be used with Config::async_support(true)
. For the synchronous
version see binidngs::sync::Command
.
This can be used for a more “typed” view of executing a command component
through the Command::wasi_cli_run
method plus
Guest::call_run
.
§Examples
use wasmtime::{Engine, Result, Store, Config};
use wasmtime::component::{ResourceTable, Linker, Component};
use wasmtime_wasi::{WasiCtx, WasiView, WasiCtxBuilder};
use wasmtime_wasi::bindings::Command;
// This example is an example shim of executing a component based on the
// command line arguments provided to this program.
#[tokio::main]
async fn main() -> Result<()> {
let args = std::env::args().skip(1).collect::<Vec<_>>();
// Configure and create `Engine`
let mut config = Config::new();
config.async_support(true);
let engine = Engine::new(&config)?;
// Configure a `Linker` with WASI, compile a component based on
// command line arguments, and then pre-instantiate it.
let mut linker = Linker::<MyState>::new(&engine);
wasmtime_wasi::add_to_linker_async(&mut linker)?;
let component = Component::from_file(&engine, &args[0])?;
let pre = linker.instantiate_pre(&component)?;
// Configure a `WasiCtx` based on this program's environment. Then
// build a `Store` to instantiate into.
let mut builder = WasiCtxBuilder::new();
builder.inherit_stdio().inherit_env().args(&args);
let mut store = Store::new(
&engine,
MyState {
ctx: builder.build(),
table: ResourceTable::new(),
},
);
// Instantiate the component and we're off to the races.
let (command, _instance) = Command::instantiate_pre(&mut store, &pre).await?;
let program_result = command.wasi_cli_run().call_run(&mut store).await?;
match program_result {
Ok(()) => Ok(()),
Err(()) => std::process::exit(1),
}
}
struct MyState {
ctx: WasiCtx,
table: ResourceTable,
}
impl WasiView for MyState {
fn ctx(&mut self) -> &mut WasiCtx { &mut self.ctx }
fn table(&mut self) -> &mut ResourceTable { &mut self.table }
}
Implementations§
source§impl Command
impl Command
sourcepub async fn instantiate_async<T: Send>(
store: impl AsContextMut<Data = T>,
component: &Component,
linker: &Linker<T>
) -> Result<(Self, Instance)>
pub async fn instantiate_async<T: Send>( store: impl AsContextMut<Data = T>, component: &Component, linker: &Linker<T> ) -> Result<(Self, Instance)>
Instantiates the provided module
using the specified
parameters, wrapping up the result in a structure that
translates between wasm and the host.
sourcepub async fn instantiate_pre<T: Send>(
store: impl AsContextMut<Data = T>,
instance_pre: &InstancePre<T>
) -> Result<(Self, Instance)>
pub async fn instantiate_pre<T: Send>( store: impl AsContextMut<Data = T>, instance_pre: &InstancePre<T> ) -> Result<(Self, Instance)>
Instantiates a pre-instantiated module using the specified parameters, wrapping up the result in a structure that translates between wasm and the host.
sourcepub fn new(store: impl AsContextMut, instance: &Instance) -> Result<Self>
pub fn new(store: impl AsContextMut, instance: &Instance) -> Result<Self>
Low-level creation wrapper for wrapping up the exports
of the instance
provided in this structure of wasm
exports.
This function will extract exports from the instance
defined within store
and wrap them all up in the
returned structure which can be used to interact with
the wasm module.
pub fn wasi_cli_run(&self) -> &Guest
Auto Trait Implementations§
impl Freeze for Command
impl RefUnwindSafe for Command
impl Send for Command
impl Sync for Command
impl Unpin for Command
impl UnwindSafe for Command
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
source§fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
fn get_fd_flags(&self) -> Result<FdFlags, Error>where
T: AsFilelike,
self
file descriptor.source§fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
fn new_set_fd_flags(&self, fd_flags: FdFlags) -> Result<SetFdFlags<T>, Error>where
T: AsFilelike,
source§fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
fn set_fd_flags(&mut self, set_fd_flags: SetFdFlags<T>) -> Result<(), Error>where
T: AsFilelike,
self
file descriptor. Read more