Crates.io | generational-box |
lib.rs | generational-box |
version | |
source | src |
created_at | 2023-12-06 06:44:14.235929 |
updated_at | 2024-12-07 03:37:10.11414 |
description | A box backed by a generational runtime |
homepage | |
repository | https://github.com/DioxusLabs/dioxus/ |
max_upload_size | |
id | 1059728 |
Cargo.toml error: | TOML parse error at line 18, column 1 | 18 | autolib = false | ^^^^^^^ unknown field `autolib`, expected one of `name`, `version`, `edition`, `authors`, `description`, `readme`, `license`, `repository`, `homepage`, `documentation`, `build`, `resolver`, `links`, `default-run`, `default_dash_run`, `rust-version`, `rust_dash_version`, `rust_version`, `license-file`, `license_dash_file`, `license_file`, `licenseFile`, `license_capital_file`, `forced-target`, `forced_dash_target`, `autobins`, `autotests`, `autoexamples`, `autobenches`, `publish`, `metadata`, `keywords`, `categories`, `exclude`, `include` |
size | 0 |
Generational Box is a runtime for Rust that allows any static type to implement Copy
. It can be combined with a global runtime to create an ergonomic state solution like dioxus-signals
. This crate doesn't have any unsafe
code.
Three main types manage state in Generational Box:
Store
: Handles recycling generational boxes that have been dropped. Your application should have one store or one store per thread.Owner
: Handles dropping generational boxes. The owner acts like a runtime lifetime guard. Any states that you create with an owner will be dropped when that owner is dropped.GenerationalBox
: The core Copy state type. The generational box will be dropped when the owner is dropped.Example:
use generational_box::{UnsyncStorage, AnyStorage};
// Create an owner for some state for a scope
let owner = UnsyncStorage::owner();
// Create some non-copy data, move it into a owner, and work with copy data
let data: String = "hello world".to_string();
let key = owner.insert(data);
// The generational box can be read from and written to like a RefCell
let value = key.read();
assert_eq!(*value, "hello world");
Internally, generational-box
creates an arena of generational RefCell
s that are recycled when the owner is dropped. You can think of the cells as something like &'static RefCell<Box<dyn Any>>
with a generational check to make recycling a cell easier to debug. Then GenerationalBox
es are Copy
because the &'static
pointer is Copy
.