Struct autoken::PotentialImmutableBorrow
source · 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>
impl<T: ?Sized> PotentialImmutableBorrow<T>
sourcepub fn new() -> Self
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());
sourcepub const fn loan(&self) -> ImmutableBorrow<Nothing<'_>>
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.
sourcepub fn strip_lifetime_analysis(
self
) -> PotentialImmutableBorrow<Nothing<'static>>
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>
impl<T: ?Sized> Clone for PotentialImmutableBorrow<T>
source§impl<T: ?Sized> Debug for PotentialImmutableBorrow<T>
impl<T: ?Sized> Debug for PotentialImmutableBorrow<T>
source§impl<T: ?Sized> Default for PotentialImmutableBorrow<T>
impl<T: ?Sized> Default for PotentialImmutableBorrow<T>
source§impl<T: ?Sized> Ord for PotentialImmutableBorrow<T>
impl<T: ?Sized> Ord for PotentialImmutableBorrow<T>
source§impl<T: ?Sized> PartialEq for PotentialImmutableBorrow<T>
impl<T: ?Sized> PartialEq for PotentialImmutableBorrow<T>
source§impl<T: ?Sized> PartialOrd for PotentialImmutableBorrow<T>
impl<T: ?Sized> PartialOrd for PotentialImmutableBorrow<T>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more