Struct nekolib_doc::corro::DormantMutRef
source · pub struct DormantMutRef<'a, T> { /* private fields */ }
Expand description
ⓘ
struct Base {
buf: Vec<String>,
len: usize, // some other data
}
enum Entry<'a> {
Occupied(OccupiedEntry<'a>),
Vacant(VacantEntry),
}
use Entry::Occupied;
struct OccupiedEntry<'a> {
handle: &'a mut String,
base: &'a mut Base,
}
struct VacantEntry;
impl Base {
pub fn new() -> Self { Self { buf: vec![], len: 0 } }
pub fn entry(&mut self, key: usize) -> Entry {
match self.buf.get_mut(key) {
Some(handle) => Occupied(OccupiedEntry { base: self, handle }),
None => unimplemented!(),
}
}
}
error[E0499]: cannot borrow `*self` as mutable more than once at a time
--> src/lib.rs:26:60
|
22 | pub fn entry(&mut self, key: usize) -> Entry {
| - let's call the lifetime of this reference `'1`
23 | match self.buf.get_mut(key) {
| --------------------- first mutable borrow occurs here
24 | Some(handle) => Occupied(OccupiedEntry { base: self, handle }),
| -------------------------------^^^^-----------
| | |
| | second mutable borrow occurs here
| returning this value requires that `self.buf` is borrowed for `'1`
§References
Implementations§
Trait Implementations§
impl<'a, T> Send for DormantMutRef<'a, T>
impl<'a, T> Sync for DormantMutRef<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for DormantMutRef<'a, T>
impl<'a, T> RefUnwindSafe for DormantMutRef<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Unpin for DormantMutRef<'a, T>
impl<'a, T> !UnwindSafe for DormantMutRef<'a, T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more