Crates.io | maybe-rc |
lib.rs | maybe-rc |
version | 0.1.3 |
source | src |
created_at | 2023-07-18 18:53:30.952954 |
updated_at | 2023-07-19 17:49:21.799389 |
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.