Struct autoken::MutableBorrow

source ·
pub struct MutableBorrow<T: ?Sized> { /* private fields */ }
Expand description

A guard for a virtual mutable borrow of the global token of type T.

These can be thought of as Refs to those global tokens except that they have no impact on the runtime and only contribute to AuToken’s static analysis of the binary.

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

Developers wishing to integrate their crate with AuToken will likely use this type to represent the static counterpart to a runtime borrow of some cell of type T as described in the Integrating AuToken section of the crate documentation.

End-users consuming crates with integrations with AuToken, meanwhile, will likely only use these guards for loaned borrows as described by the Making Sense of Control Flow Errors section of the crate documentation.

Implementations§

source§

impl<T: ?Sized> MutableBorrow<T>

source

pub const fn new() -> Self

Constructs a new MutableBorrow guard.

This function has no runtime cost but will cause the AuToken static analyzer to report potential virtual borrowing issues with other guards.

Internally, this function just calls borrow_mutably with the provided type T.

source

pub fn downgrade(self) -> PotentialMutableBorrow<T>

Transforms this MutableBorrow into a PotentialMutableBorrow of the same type.

source

pub fn downgrade_ref(&self) -> &PotentialMutableBorrow<T>

Transforms a reference to MutableBorrow into a reference to a PotentialMutableBorrow of the same type.

source

pub fn downgrade_mut(&mut self) -> &mut PotentialMutableBorrow<T>

Transforms a mutable reference to MutableBorrow into a mutable reference to a PotentialMutableBorrow of the same type.

source

pub fn loan(&mut self) -> MutableBorrow<Nothing<'_>>

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

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

source

pub fn assume_no_alias_loan(&self) -> MutableBorrow<Nothing<'_>>

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

Unlike loan, this method takes an immutable reference to the loaning MutableBorrow, which makes it more prone to accidental borrow aliasing.

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

source

pub fn assume_no_alias_clone(&self) -> Self

Clones the current MutableBorrow instance and assumes that it is safe to do so.

source

pub fn strip_lifetime_analysis(self) -> MutableBorrow<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> Debug for MutableBorrow<T>

source§

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

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

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

source§

fn default() -> Self

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

impl<T: ?Sized> Drop for MutableBorrow<T>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<T: ?Sized> Ord for MutableBorrow<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 MutableBorrow<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 MutableBorrow<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 MutableBorrow<T>

Auto Trait Implementations§

§

impl<T: ?Sized> RefUnwindSafe for MutableBorrow<T>

§

impl<T: ?Sized> Send for MutableBorrow<T>

§

impl<T: ?Sized> Sync for MutableBorrow<T>

§

impl<T: ?Sized> Unpin for MutableBorrow<T>

§

impl<T: ?Sized> UnwindSafe for MutableBorrow<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<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.