pub struct PotentialImmutableBorrow<T: ?Sized>(/* private fields */);
Expand description

A variant of ImmutableBorrow which represents an immutable borrow which can gracefully recover from borrow errors if they end up occurring.

Unlike an ImmutableBorrow, this token will not trigger a warning if a confounding borrow is potentially alive at the same time as it since, if the dynamic borrow this borrow guard backs ends up aliasing with something else, the error is assumed to be handled gracefully.

As with borrow_immutably and friends, setting T to Nothing causes this guard to have no effect on the statically-analyzed borrow counts.

If the error cannot be handled gracefully, one may construct an ImmutableBorrow and downgrade it to a PotentialImmutableBorrow so that the static analyzer will start reporting these potentially aliasing borrows again.

See the Potential Borrows section of the crate documentation for more details.

Implementations§

source§

impl<T: ?Sized> PotentialImmutableBorrow<T>

source

pub fn new() -> Self

Constructs a new PotentialImmutableBorrow guard.

This function has no runtime cost but will cause the AuToken static analyzer to increment the number of immutable borrows of type T in scope. Note, however, that it will not cause the static analyzer to report aliases with potentially confounding borrow tokens. See the structure documentation for details.

Internally, this function calls:

autoken::assume_no_alias(|| ImmutableBorrow::<T>::new());
source

pub const fn loan(&self) -> ImmutableBorrow<Nothing<'_>>

Creates a loaned ImmutableBorrow of this guard which has no effect on the static analysis borrow counters by itself, making it safe to use in conditional code.

This is typically used to construct the ImmutableBorrow guard for runtime borrow guards which were successfully created in fallible code.

See the Making Sense of Control Flow Errors section of the crate documentation for more details on loans.

source

pub fn strip_lifetime_analysis( self ) -> PotentialImmutableBorrow<Nothing<'static>>

Transforms the type of T into Nothing, effectively making it as if this borrow guard no longer exists.

See the Making Sense of Control Flow Errors section of the crate documentation for more details on the utility of strip_lifetime_analysis.

Trait Implementations§

source§

impl<T: ?Sized> Clone for PotentialImmutableBorrow<T>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<T: ?Sized> Debug for PotentialImmutableBorrow<T>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T: ?Sized> Default for PotentialImmutableBorrow<T>

source§

fn default() -> Self

Returns the “default value” for a type. Read more
source§

impl<T: ?Sized> Ord for PotentialImmutableBorrow<T>

source§

fn cmp(&self, _other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl<T: ?Sized> PartialEq for PotentialImmutableBorrow<T>

source§

fn eq(&self, _other: &Self) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl<T: ?Sized> PartialOrd for PotentialImmutableBorrow<T>

source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl<T: ?Sized> Eq for PotentialImmutableBorrow<T>

Auto Trait Implementations§

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<T, U> TryFrom<U> for T
where U: Into<T>,

§

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>,

§

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.