| Crates.io | maybe-rc |
| lib.rs | maybe-rc |
| version | 0.1.3 |
| created_at | 2023-07-18 18:53:30.952954+00 |
| updated_at | 2023-07-19 17:49:21.799389+00 |
| description | Factory for creation of circular refcounted dependencies |
| homepage | |
| repository | https://github.com/MatrixDev/rs-maybe-rc |
| max_upload_size | |
| id | 919714 |
| size | 26,389 |
This library provides a method of creating circular reference counted dependencies when creation of the nested objects can fail (return Result).
Usually Rc::new_cyclic can be used:
fn new() -> Rc<Self> {
Rc::new_cyclic(|weak| {
let child = Child::new(weak);
Self {
child,
}
})
}
But what to do in cases when Child::new returns an Option or Result?
This is the problem that maybe-rc tries to solve:
fn new() -> Result<Rc<Self>, ()> {
try_new_cyclic_rc(|weak| {
let child = Child::new(weak.clone())?;
Ok(Self {
child,
})
})
}
Original idea was much more powerful and could also handle async functions but
was considered way too unsafe and breaking some contracts provided by Rc/Arc.
There is a hope that it will be possible to implement properly in the future as a library or even inside std.
Its description can be found at README.md.contested.