pub struct Command { /* private fields */ }
Expand description
Synchronous 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(false)
. For the
asynchronous version see bindings::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::sync::Command;
// This example is an example shim of executing a component based on the
// command line arguments provided to this program.
fn main() -> Result<()> {
let args = std::env::args().skip(1).collect::<Vec<_>>();
// Configure and create `Engine`
let engine = Engine::default();
// Configure a `Linker` with WASI, compile a component based on
// command line arguments.
let mut linker = Linker::<MyState>::new(&engine);
wasmtime_wasi::add_to_linker_sync(&mut linker)?;
let component = Component::from_file(&engine, &args[0])?;
// 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[2..]);
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 = Command::instantiate(&mut store, &component, &linker)?;
let program_result = command.wasi_cli_run().call_run(&mut store)?;
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 }
}
Auto-generated bindings for an instance a component which
implements the world command
.
This structure can be created through a number of means depending on your requirements and what you have on hand:
-
The most convenient way is to use
Command::instantiate
which only needs aStore
,Component
, andLinker
. -
Alternatively you can create a
CommandPre
ahead of time with aComponent
to front-load string lookups of exports once instead of per-instantiation. This method then usesCommandPre::instantiate
to create aCommand
. -
If you’ve instantiated the instance yourself already then you can use
Command::new
. -
You can also access the guts of instantiation through
CommandIndices::new_instance
followed byCommandIndices::load
to crate an instance of this type.
These methods are all equivalent to one another and move around the tradeoff of what work is performed when.
Implementations§
source§impl Command
impl Command
sourcepub fn instantiate<_T>(
store: impl AsContextMut<Data = _T>,
component: &Component,
linker: &Linker<_T>,
) -> Result<Command>
pub fn instantiate<_T>( store: impl AsContextMut<Data = _T>, component: &Component, linker: &Linker<_T>, ) -> Result<Command>
Convenience wrapper around CommandPre::new
and
CommandPre::instantiate
.
sourcepub fn new(store: impl AsContextMut, instance: &Instance) -> Result<Command>
pub fn new(store: impl AsContextMut, instance: &Instance) -> Result<Command>
Convenience wrapper around CommandIndices::new_instance
and
CommandIndices::load
.
pub fn add_to_linker<T, U>( linker: &mut Linker<T>, options: &LinkOptions, get: impl Fn(&mut T) -> &mut U + Send + Sync + Copy + 'static, ) -> Result<()>
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
§impl<T> GetSetFdFlags for T
impl<T> GetSetFdFlags for T
§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.§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§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more