1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
//! Once wrapper: ensure a function runs at most once.
//!
//! Provides [`once`] which wraps a `FnOnce` so that it is executed at most one
//! time, even if the returned closure is called multiple times.
//!
//! Basic example:
//! ```rust
//! use toolchest::functions::once;
//! use std::sync::atomic::{AtomicUsize, Ordering};
//! use std::sync::Arc;
//!
//! let counter = Arc::new(AtomicUsize::new(0));
//! let c = Arc::clone(&counter);
//! let run_once = once(move || { c.fetch_add(1, Ordering::SeqCst); });
//! run_once();
//! // Once returns an FnOnce; call it only once in examples.
//! assert_eq!(counter.load(Ordering::SeqCst), 1);
//! ```
use ;
/// Wrap a function so it can run at most once.
///
/// Returns a closure that will invoke `func` at most a single time. Subsequent
/// calls are no-ops.