Struct wasmtime_wasi::preview2::Table
source · pub struct Table { /* private fields */ }
Expand description
The Table
type is designed to map u32 handles to resources. The table is now part of the
public interface to a WasiCtx
- it is reference counted so that it can be shared beyond a
WasiCtx
with other WASI proposals (e.g. wasi-crypto
and wasi-nn
) to manage their
resources. Elements in the Table
are Any
typed.
The Table
type is intended to model how the Interface Types concept of Resources is shaping
up. Right now it is just an approximation.
Implementations§
source§impl Table
impl Table
sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Create an empty table with at least the specified capacity.
sourcepub fn push<T>(&mut self, entry: T) -> Result<Resource<T>, TableError>
pub fn push<T>(&mut self, entry: T) -> Result<Resource<T>, TableError>
Inserts a new value T
into this table, returning a corresponding
Resource<T>
which can be used to refer to it after it was inserted.
sourcepub fn push_child<T, U>(
&mut self,
entry: T,
parent: &Resource<U>
) -> Result<Resource<T>, TableError>
pub fn push_child<T, U>( &mut self, entry: T, parent: &Resource<U> ) -> Result<Resource<T>, TableError>
Insert a resource at the next available index, and track that it has a parent resource.
The parent must exist to create a child. All children resources must
be destroyed before a parent can be destroyed - otherwise Table::delete
will fail with TableError::HasChildren
.
Parent-child relationships are tracked inside the table to ensure that
a parent resource is not deleted while it has live children. This
allows child resources to hold “references” to a parent by table
index, to avoid needing e.g. an Arc<Mutex<parent>>
and the associated
locking overhead and design issues, such as child existence extending
lifetime of parent referent even after parent resource is destroyed,
possibility for deadlocks.
Parent-child relationships may not be modified once created. There
is no way to observe these relationships through the Table
methods
except for erroring on deletion, or the std::fmt::Debug
impl.
sourcepub fn get<T: Any + Sized>(&self, key: &Resource<T>) -> Result<&T, TableError>
pub fn get<T: Any + Sized>(&self, key: &Resource<T>) -> Result<&T, TableError>
Get an immutable reference to a resource of a given type at a given index.
Multiple shared references can be borrowed at any given time.
sourcepub fn get_mut<T: Any + Sized>(
&mut self,
key: &Resource<T>
) -> Result<&mut T, TableError>
pub fn get_mut<T: Any + Sized>( &mut self, key: &Resource<T> ) -> Result<&mut T, TableError>
Get an mutable reference to a resource of a given type at a given index.
sourcepub fn get_any_mut(&mut self, key: u32) -> Result<&mut dyn Any, TableError>
pub fn get_any_mut(&mut self, key: u32) -> Result<&mut dyn Any, TableError>
Returns the raw Any
at the key
index provided.
sourcepub fn delete<T>(&mut self, resource: Resource<T>) -> Result<T, TableError>where
T: Any,
pub fn delete<T>(&mut self, resource: Resource<T>) -> Result<T, TableError>where
T: Any,
Same as delete
, but typed
sourcepub fn iter_entries<'a, T>(
&'a mut self,
map: HashMap<u32, T>
) -> impl Iterator<Item = (Result<&'a mut dyn Any, TableError>, T)>
pub fn iter_entries<'a, T>( &'a mut self, map: HashMap<u32, T> ) -> impl Iterator<Item = (Result<&'a mut dyn Any, TableError>, T)>
sourcepub fn iter_children<T>(
&self,
parent: &Resource<T>
) -> Result<impl Iterator<Item = &(dyn Any + Send + Sync)>, TableError>where
T: 'static,
pub fn iter_children<T>(
&self,
parent: &Resource<T>
) -> Result<impl Iterator<Item = &(dyn Any + Send + Sync)>, TableError>where
T: 'static,
Iterate over all children belonging to the provided parent
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Table
impl Send for Table
impl Sync for Table
impl Unpin for Table
impl !UnwindSafe for Table
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