JailValueRef

Struct JailValueRef 

Source
pub struct JailValueRef<'a, T> { /* private fields */ }
Expand description

A guarded wrapper around an immutable reference to the value contained in a JailCell

JailValueRef implements [Deref<Target = T>], AsRef, and Borrow to allow transparent access to its underlying value

As long as the JailValueRef remains in scope, the value in JailCell will remain marked as immutably referenced and unable to be mutably referenced. You can manually drop the JailValueRef out of scope by passing it as the first parameter to the function [JailValueRef::unguard(jail_val_ref)]

You can obtain a JailValueRef by calling guard_ref() on a JailCell

§Example

let jail: JailCell<u32> = JailCell::new(42);
let mut grd_ref = jail.guard_ref()?;
assert_eq!(*grd_ref, 42);
jail.visit_ref(|val| {
    assert_eq!(*val, 42);
    Ok(())
});
JailValueRef::unguard(grd_ref);

Implementations§

Source§

impl<'a, T> JailValueRef<'a, T>

Source

pub fn unguard(_guarded_jail_value: Self)

Manually end a JailValueRef value’s temporary guarded absence from the JailCell

This method simply takes ownership of the JailValueRef and immediately lets it go out of scope, causing it’s drop() method to be called and decreasing its immutable reference count in the JailCell

§Example
let jail: JailCell<u32> = JailCell::new(42);
let grd_ref = jail.guard_ref()?;
// val CANNOT be mutably referenced because the immutable reference is still in scope
assert!(jail.visit_mut(|val| Ok(())).is_err());
JailValueRef::unguard(grd_ref);
// val CAN be mutably referenced because the immutable reference was dropped
assert!(jail.visit_mut(|val| Ok(())).is_ok());

Trait Implementations§

Source§

impl<'a, T> AsRef<T> for JailValueRef<'a, T>

Source§

fn as_ref(&self) -> &T

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<'a, T> Borrow<T> for JailValueRef<'a, T>

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<'a, T> Deref for JailValueRef<'a, T>

Source§

type Target = T

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl<'a, T> Drop for JailValueRef<'a, T>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more

Auto Trait Implementations§

§

impl<'a, T> Freeze for JailValueRef<'a, T>

§

impl<'a, T> RefUnwindSafe for JailValueRef<'a, T>
where T: RefUnwindSafe,

§

impl<'a, T> Send for JailValueRef<'a, T>
where T: Send,

§

impl<'a, T> Sync for JailValueRef<'a, T>
where T: Sync,

§

impl<'a, T> Unpin for JailValueRef<'a, T>

§

impl<'a, T> !UnwindSafe for JailValueRef<'a, T>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.