Crate better_refcell

Source
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 RefCell interface 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");

Structs§

BetterRefCell
An enhanced RefCell with double-borrowing support.