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
41
42
43
44
// =============================================================================
// Copyright (c) 2025 - 2026 Haixing Hu.
//
// SPDX-License-Identifier: Apache-2.0
//
// Licensed under the Apache License, Version 2.0.
// =============================================================================
//! # ConsumerOnce Types
//!
//! Provides implementations of one-time consumer interfaces for executing
//! one-time operations that accept a single input parameter but return no
//! result.
//!
//! It is similar to the `FnOnce(&T)` trait in the standard library.
//!
//! This module provides a unified `ConsumerOnce` trait and two concrete
//! implementations:
//!
//! - **`BoxConsumerOnce<T>`**: Box-based single ownership implementation
//! - **`BoxConditionalConsumerOnce<T>`**: conditional single ownership
//!
//! # Why No Arc/Rc Variants?
//!
//! Unlike reusable [`Consumer`](crate::consumers::Consumer) implementations,
//! this module does **not** provide `ArcConsumerOnce` or `RcConsumerOnce`
//! implementations. This is a design decision based on the fact that `FnOnce`
//! semantics require single ownership at the call site, while `Arc` and `Rc`
//! are meant to preserve shared ownership across clones.
//!
//! # Design Philosophy
//!
//! ConsumerOnce uses `FnOnce(&T)` semantics for truly one-time consumption
//! operations.
//!
//! Unlike Consumer, ConsumerOnce consumes itself on first call. Suitable for
//! initialization callbacks, cleanup callbacks, and similar scenarios.
pub use BoxConsumerOnce;
pub use BoxConditionalConsumerOnce;
pub use ConsumerOnce;