pub struct ResourceTable { /* private fields */ }
Expand description
Map-like data structure storing Deno’s resources (equivalent to file descriptors).
Provides basic methods for element access. A resource can be of any type. Different types of resources can be stored in the same map, and provided with a name for description.
Each resource is identified through a resource ID (rid), which acts as the key in the map.
Implementations§
Source§impl ResourceTable
impl ResourceTable
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Returns the number of resources currently active in the resource table. Resources taken from the table do not contribute to this count.
Sourcepub fn add<T: Resource>(&mut self, resource: T) -> ResourceId
pub fn add<T: Resource>(&mut self, resource: T) -> ResourceId
Inserts resource into the resource table, which takes ownership of it.
The resource type is erased at runtime and must be statically known
when retrieving it through get()
.
Returns a unique resource ID, which acts as a key for this resource.
Sourcepub fn add_rc<T: Resource>(&mut self, resource: Rc<T>) -> ResourceId
pub fn add_rc<T: Resource>(&mut self, resource: Rc<T>) -> ResourceId
Inserts a Rc
-wrapped resource into the resource table.
The resource type is erased at runtime and must be statically known
when retrieving it through get()
.
Returns a unique resource ID, which acts as a key for this resource.
pub fn add_rc_dyn(&mut self, resource: Rc<dyn Resource>) -> ResourceId
Sourcepub fn has(&self, rid: ResourceId) -> bool
pub fn has(&self, rid: ResourceId) -> bool
Returns true if any resource with the given rid
exists.
Sourcepub fn get<T: Resource>(&self, rid: ResourceId) -> Result<Rc<T>, Error>
pub fn get<T: Resource>(&self, rid: ResourceId) -> Result<Rc<T>, Error>
Returns a reference counted pointer to the resource of type T
with the
given rid
. If rid
is not present or has a type different than T
,
this function returns None
.
pub fn get_any(&self, rid: ResourceId) -> Result<Rc<dyn Resource>, Error>
Sourcepub fn replace<T: Resource>(&mut self, rid: ResourceId, resource: T)
pub fn replace<T: Resource>(&mut self, rid: ResourceId, resource: T)
Replaces a resource with a new resource.
Panics if the resource does not exist.
Sourcepub fn take<T: Resource>(&mut self, rid: ResourceId) -> Result<Rc<T>, Error>
pub fn take<T: Resource>(&mut self, rid: ResourceId) -> Result<Rc<T>, Error>
Removes a resource of type T
from the resource table and returns it.
If a resource with the given rid
exists but its type does not match T
,
it is not removed from the resource table. Note that the resource’s
close()
method is not called.
Also note that there might be a case where
the returned Rc<T>
is referenced by other variables. That is, we cannot
assume that Rc::strong_count(&returned_rc)
is always equal to 1 on success.
In particular, be really careful when you want to extract the inner value of
type T
from Rc<T>
.
Sourcepub fn take_any(&mut self, rid: ResourceId) -> Result<Rc<dyn Resource>, Error>
pub fn take_any(&mut self, rid: ResourceId) -> Result<Rc<dyn Resource>, Error>
Removes a resource from the resource table and returns it. Note that the
resource’s close()
method is not called.
Also note that there might be a
case where the returned Rc<T>
is referenced by other variables. That is,
we cannot assume that Rc::strong_count(&returned_rc)
is always equal to 1
on success. In particular, be really careful when you want to extract the
inner value of type T
from Rc<T>
.
Sourcepub fn close(&mut self, rid: ResourceId) -> Result<(), Error>
👎Deprecated: This method may deadlock. Use take() and close() instead.
pub fn close(&mut self, rid: ResourceId) -> Result<(), Error>
Removes the resource with the given rid
from the resource table. If the
only reference to this resource existed in the resource table, this will
cause the resource to be dropped. However, since resources are reference
counted, therefore pending ops are not automatically cancelled. A resource
may implement the close()
method to perform clean-ups such as canceling
ops.
Sourcepub fn names(&self) -> impl Iterator<Item = (ResourceId, Cow<'_, str>)>
pub fn names(&self) -> impl Iterator<Item = (ResourceId, Cow<'_, str>)>
Returns an iterator that yields a (id, name)
pair for every resource
that’s currently in the resource table. This can be used for debugging
purposes or to implement the op_resources
op. Note that the order in
which items appear is not specified.
§Example
let resource_names = resource_table.names().collect::<Vec<_>>();
Sourcepub fn get_fd(&self, rid: ResourceId) -> Result<ResourceHandleFd, Error>
pub fn get_fd(&self, rid: ResourceId) -> Result<ResourceHandleFd, Error>
Retrieves the ResourceHandleFd
for a given resource, for potential optimization
purposes within ops.
Sourcepub fn get_socket(&self, rid: ResourceId) -> Result<ResourceHandleSocket, Error>
pub fn get_socket(&self, rid: ResourceId) -> Result<ResourceHandleSocket, Error>
Retrieves the ResourceHandleSocket
for a given resource, for potential optimization
purposes within ops.
Sourcepub fn get_handle(&self, rid: ResourceId) -> Result<ResourceHandle, Error>
pub fn get_handle(&self, rid: ResourceId) -> Result<ResourceHandle, Error>
Retrieves the ResourceHandle
for a given resource, for potential optimization
purposes within ops.
Trait Implementations§
Source§impl Default for ResourceTable
impl Default for ResourceTable
Source§fn default() -> ResourceTable
fn default() -> ResourceTable
Auto Trait Implementations§
impl Freeze for ResourceTable
impl !RefUnwindSafe for ResourceTable
impl !Send for ResourceTable
impl !Sync for ResourceTable
impl Unpin for ResourceTable
impl !UnwindSafe for ResourceTable
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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.