Expand description
A drop-in replacement for RefCell with safe unborrow and reborrow capabilities.
§Features
- Allows putting back a borrowed value and reborrowing it within a closure.
- Fully compatible with the
RefCellinterface of the stable Rust standard library. - Zero dependencies.
§Usage
use better_refcell::BetterRefCell;
use std::cell::*;
let cell = BetterRefCell::new(42);
let mut guard: RefMut<i32> = cell.borrow_mut();
let mut_reference: &mut i32 = &mut *guard;
let ret = cell.unborrow(mut_reference, || {
let mut guard = cell.borrow_mut();
assert_eq!(*guard, 42);
*guard += 1;
format!("Returns {guard}")
});
assert_eq!(*guard, 43);
assert_eq!(ret, "Returns 43");Macros§
- unborrow_
all - A macro to unborrow multiple instances at once, using either
BetterRefCell::unborroworBetterRefCell::unborrow_ref. - unborrow_
all_ unchecked - A macro to unborrow multiple instances at once, using either
BetterRefCell::unborrow_uncheckedorBetterRefCell::unborrow_ref_unchecked.
Structs§
- Better
RefCell - An enhanced
RefCellwith double-borrowing support.