3 releases
new 0.1.2 | Dec 14, 2024 |
---|---|
0.1.1 | Dec 14, 2024 |
0.1.0 | Dec 14, 2024 |
#602 in Concurrency
315 downloads per month
Used in async-oneshot-channel
16KB
230 lines
take-once
A thread-safe container for one-time storage and one-time consumption of a value.
Usage
use take_once::TakeOnce;
let cell = TakeOnce::new();
// Initial store succeeds
assert_eq!(cell.store(42), None);
// Subsequent stores return the provided value
assert_eq!(cell.store(24), Some(24));
// Take the value
assert_eq!(cell.take(), Some(42));
// Can't take twice
assert_eq!(cell.take(), None);
// Can be used across threads via `Arc`
use std::sync::Arc;
use std::thread;
let cell = Arc::new(TakeOnce::new());
let cell_clone = cell.clone();
let handle = thread::spawn(move || {
assert_eq!(cell_clone.take(), Some(42));
});
handle.join().unwrap();
assert_eq!(cell.take(), Some(42));
See the documentation for more details.
Testing
This crate uses shuttle for (more) exhaustive testing. To run the shuttle tests, run:
cargo test --features _shuttle
License
MIT
Dependencies
~0–23MB
~324K SLoC