Ref
types with internal mutability that implement Send
and Sync
.
These types are shared by [rt_map
] and [rt_vec
].
Add the following to Cargo.toml
:
toml
rt_ref = "0.1.3" # or
rt_ref = { version = "0.1.3", features = ["unsafe_debug"] }
In code:
```rust use rt_ref::{Cell, Ref, RefMut};
let a = 1;
// Insert a value into a collection, wrapped with Cell
.
let mut v = Vec::new();
v.push(Cell::new(a));
let v = v; // v is now compile-time immutable. let a = v.get(0).map(|cell| RefMut::new(cell.borrow_mut())); a.map(|mut a| { *a += 2; });
let a = v.get(0).map(|cell| Ref::new(cell.borrow())); assert_eq!(Some(3), a.map(|a| *a)); ```
"unsafe_debug"
:The borrowed reference will use the inner type's Debug
implementation when formatted.
```rust use rt_ref::{Cell, Ref, RefMut};
let mut v = Vec::new(); v.push(Cell::new("a"));
assert_eq!( r#"[Cell { flag: 0, inner: UnsafeCell { .. } }]"#, format!("{v:?}") );
assert_eq!(r#"[Cell { flag: 0, inner: "a" }]"#, format!("{v:?}")); ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.