Skip to main content

qubit_fs/directory/
delete_outcome.rs

1// =============================================================================
2//    Copyright (c) 2026 Haixing Hu.
3//
4//    SPDX-License-Identifier: Apache-2.0
5//
6//    Licensed under the Apache License, Version 2.0.
7// =============================================================================
8// facade tests.
9//! Deletion outcome.
10
11/// Result returned after a deletion request.
12///
13/// # Examples
14///
15/// ```rust
16/// use qubit_fs::directory::DeleteOutcome;
17///
18/// let outcome = DeleteOutcome::new(true);
19/// assert!(outcome.already_missing());
20/// ```
21#[derive(Clone, Copy, Debug, Eq, PartialEq)]
22pub struct DeleteOutcome {
23    /// Whether an already-missing target satisfied the request.
24    already_missing: bool,
25    /// Number of deleted entries when the provider reports it.
26    deleted_entries: Option<u64>,
27}
28
29impl DeleteOutcome {
30    /// Creates an outcome. `already_missing` reports an accepted missing
31    /// target.
32    #[inline]
33    #[must_use]
34    pub const fn new(already_missing: bool) -> Self {
35        Self {
36            already_missing,
37            deleted_entries: None,
38        }
39    }
40
41    /// Returns whether a missing target satisfied the request.
42    #[inline]
43    #[must_use]
44    pub const fn already_missing(self) -> bool {
45        self.already_missing
46    }
47
48    /// Attaches the number of deleted entries, when known.
49    #[inline]
50    #[must_use]
51    pub const fn with_deleted_entries(mut self, count: u64) -> Self {
52        self.deleted_entries = Some(count);
53        self
54    }
55
56    /// Returns the number of deleted entries, when reported.
57    #[inline]
58    #[must_use]
59    pub const fn deleted_entries(self) -> Option<u64> {
60        self.deleted_entries
61    }
62}
63
64#[cfg(test)]
65mod tests {
66    use std::hint::black_box;
67
68    use super::DeleteOutcome;
69
70    #[test]
71    fn outcome_accessors_are_executed_at_runtime() {
72        let constructor: fn(bool) -> DeleteOutcome = black_box(DeleteOutcome::new);
73        let with_entries: fn(DeleteOutcome, u64) -> DeleteOutcome = black_box(DeleteOutcome::with_deleted_entries);
74        let already_missing: fn(DeleteOutcome) -> bool = black_box(DeleteOutcome::already_missing);
75        let deleted_entries: fn(DeleteOutcome) -> Option<u64> = black_box(DeleteOutcome::deleted_entries);
76
77        let outcome = with_entries(constructor(true), 2);
78        assert!(already_missing(outcome));
79        assert_eq!(Some(2), deleted_entries(outcome));
80    }
81}