Trait wasmtime_wasi::Subscribe
source · pub trait Subscribe: Send + 'static {
// Required method
fn ready<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}
Expand description
A trait used internally within a Pollable
to create a pollable
resource in wasi:io/poll
.
This trait is the internal implementation detail of any pollable resource in
this crate’s implementation of WASI. The ready
function is an async fn
which resolves when the implementation is ready. Using native async
Rust
enables this type’s readiness to compose with other types’ readiness
throughout the WASI implementation.
This trait is used in conjunction with subscribe
to create a pollable
resource.
§Example
This is a simple example of creating a Pollable
resource from a few
parameters.
use tokio::time::{self, Duration, Instant};
use wasmtime_wasi::{WasiView, Subscribe, subscribe, Pollable, async_trait};
use wasmtime::component::Resource;
use wasmtime::Result;
fn sleep(cx: &mut dyn WasiView, dur: Duration) -> Result<Resource<Pollable>> {
let end = Instant::now() + dur;
let sleep = MySleep { end };
let sleep_resource = cx.table().push(sleep)?;
subscribe(cx.table(), sleep_resource)
}
struct MySleep {
end: Instant,
}
#[async_trait]
impl Subscribe for MySleep {
async fn ready(&mut self) {
tokio::time::sleep_until(self.end).await;
}
}
Required Methods§
sourcefn ready<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn ready<'life0, 'async_trait>(
&'life0 mut self,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
An asynchronous function which resolves when this object’s readiness operation is ready.
This function is invoked as part of poll
in wasi:io/poll
. The
meaning of when this function Returns depends on what object this
Subscribe
is attached to. When the returned future resolves then the
corresponding call to wasi:io/poll
will return.
Note that this method does not return an error. Returning an error
should be done through accessors on the object that this pollable
is
connected to. The call to wasi:io/poll
itself does not return errors,
only a list of ready objects.