better-refcell

Crates.iobetter-refcell
lib.rsbetter-refcell
version0.1.1
created_at2025-05-20 15:09:04.037606+00
updated_at2025-05-24 15:30:03.922879+00
descriptionA drop-in replacement for RefCell with safe unborrow and reborrow capabilities.
homepage
repositoryhttps://github.com/haruleekim/better-refcell
max_upload_size
id1681583
size35,004
Haru Kim (haruleekim)

documentation

README

BetterRefCell

License Version Docs.rs CI

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");

License

This project is dual-licensed under either the MIT or Apache-2.0 license, at your option.

Commit count: 6

cargo fmt