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 Ref
s 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>
impl<T: ?Sized> MutableBorrow<T>
Sourcepub const fn new() -> Self
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
.
Sourcepub fn downgrade(self) -> PotentialMutableBorrow<T>
pub fn downgrade(self) -> PotentialMutableBorrow<T>
Transforms this MutableBorrow
into a PotentialMutableBorrow
of the same type.
Sourcepub fn downgrade_ref(&self) -> &PotentialMutableBorrow<T>
pub fn downgrade_ref(&self) -> &PotentialMutableBorrow<T>
Transforms a reference to MutableBorrow
into a reference to a PotentialMutableBorrow
of
the same type.
Sourcepub fn downgrade_mut(&mut self) -> &mut PotentialMutableBorrow<T>
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.
Sourcepub fn loan(&mut self) -> MutableBorrow<Nothing<'_>>
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.
Sourcepub fn assume_no_alias_loan(&self) -> MutableBorrow<Nothing<'_>>
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.
Sourcepub fn assume_no_alias_clone(&self) -> Self
pub fn assume_no_alias_clone(&self) -> Self
Clones the current MutableBorrow
instance and assumes that it is safe to do so.
Sourcepub fn strip_lifetime_analysis(self) -> MutableBorrow<Nothing<'static>>
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
.