take-once

Crates.iotake-once
lib.rstake-once
version0.1.3
created_at2024-12-14 02:28:50.863838+00
updated_at2025-08-26 23:15:50.332286+00
descriptionA thread-safe container for one-time storage and one-time consumption of a value.
homepage
repositoryhttps://github.com/AmitPr/take-once
max_upload_size
id1482798
size28,642
Amit Prasad (AmitPr)

documentation

README

take-once

License Cargo Documentation

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

Commit count: 6

cargo fmt