2 releases
1.0.0-beta.2 | May 27, 2020 |
---|---|
1.0.0-beta.1 | May 24, 2020 |
#2810 in Rust patterns
44KB
805 lines
ref-portals
Safely use (stack) references outside their original scope.
This library provides convenient runtime-checked out-of-scope handles that are:
!Send + !Sync
or (dependently)Send
/Sync
,- immutable or mutable and
- target
Sync
or!Sync
values.
Please see the documentation for more information about which to choose.
Example
use ref_portals::rc::Anchor;
let x = "Scoped".to_owned();
let anchor = Anchor::new(&x);
let self_owned: Box<dyn Fn() + 'static> = Box::new({
let portal = anchor.portal();
move || println!("{}", *portal)
});
self_owned(); // Scoped
Note that dropping anchor
before self_owned
would still cause a panic here.
You can use weak portals to work around this:
use ref_portals::rc::Anchor;
let x = "Scoped".to_owned();
let anchor = Anchor::new(&x);
let eternal: &'static dyn Fn() = Box::leak(Box::new({
let weak_portal = anchor.weak_portal();
move || println!(
"{}",
// Panics iff the anchor has been dropped.
*weak_portal.upgrade(),
)
}));
eternal(); // Scoped
Versioning
ref-portals
strictly follows Semantic Versioning 2.0.0 with the following exceptions:
- The minor version will not reset to 0 on major version changes.
Consider it the global feature level. - The patch version will not reset to 0 on major or minor version changes.
Consider it the global patch level.
Dependencies
~120KB