# BetterRefCell
[](https://github.com/haruleekim/better-refcell#License)
[](https://crates.io/crates/better-refcell)
[](https://docs.rs/better-refcell)
[](https://github.com/haruleekim/better-refcell/actions/workflows/ci.yaml)
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
```rust
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.