Skip to main content

netstack3_base/testutil/
send_token.rs

1// Copyright 2026 The Fuchsia Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5use alloc::sync::Arc;
6use core::sync::atomic::{AtomicUsize, Ordering};
7
8/// A tracker for [`FakeSendToken`]s.
9#[derive(Debug, Default, Clone)]
10pub struct FakeSendTokenTracker(Arc<AtomicUsize>);
11
12impl FakeSendTokenTracker {
13    /// Creates a new `FakeSendTokenTracker`.
14    pub fn new() -> Self {
15        Self::default()
16    }
17
18    /// Returns the number of tokens that are currently live.
19    pub fn live_tokens(&self) -> usize {
20        self.0.load(Ordering::SeqCst)
21    }
22
23    /// Creates a new token associated with this tracker.
24    pub fn token(&self) -> FakeSendToken {
25        let _: usize = self.0.fetch_add(1, Ordering::SeqCst);
26        FakeSendToken(self.0.clone())
27    }
28}
29
30/// A fake send token for testing.
31#[derive(Debug, Default)]
32pub struct FakeSendToken(Arc<AtomicUsize>);
33
34impl Drop for FakeSendToken {
35    fn drop(&mut self) {
36        let _: usize = self.0.fetch_sub(1, Ordering::SeqCst);
37    }
38}