better-refcell 0.1.0-beta.1

An improved RefCell offering safe unborrow and reborrow capabilities.
Documentation

BetterRefCell

An improved RefCell offering safe unborrow and reborrow capabilities.

Features

  • Enables returning a borrowed value and reborrowing it within a closure.
  • Fully compatible with the std::cell::RefCell interface.
  • 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");