Skip to main content

qubit_codec/value/
decode_lifecycle_progress.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//! Progress from a scratch-backed single-value decode lifecycle.
9
10/// Main decoded value and lifecycle output lengths written to caller storage.
11///
12/// # Type Parameters
13///
14/// - `V`: Logical value type produced by the codec.
15#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
16#[must_use]
17pub struct DecodeLifecycleProgress<V> {
18    /// Main value decoded from the supplied input.
19    value: V,
20    /// Number of reset values written to caller storage.
21    reset_written: usize,
22    /// Number of finish values written to caller storage.
23    finish_written: usize,
24}
25
26impl<V> DecodeLifecycleProgress<V> {
27    /// Creates progress for a completed decode lifecycle.
28    ///
29    /// # Parameters
30    ///
31    /// - `value`: Main value decoded from the supplied input.
32    /// - `reset_written`: Number of reset values written to caller storage.
33    /// - `finish_written`: Number of finish values written to caller storage.
34    ///
35    /// # Returns
36    ///
37    /// Returns completed lifecycle progress.
38    #[inline(always)]
39    pub(crate) const fn new(
40        value: V,
41        reset_written: usize,
42        finish_written: usize,
43    ) -> Self {
44        Self {
45            value,
46            reset_written,
47            finish_written,
48        }
49    }
50
51    /// Returns the main value decoded from the supplied input.
52    ///
53    /// # Returns
54    ///
55    /// Returns a shared reference to the main decoded value.
56    #[inline(always)]
57    #[must_use]
58    pub const fn value(&self) -> &V {
59        &self.value
60    }
61
62    /// Returns the number of reset values written to caller storage.
63    ///
64    /// # Returns
65    ///
66    /// Returns the initialized reset output length.
67    #[inline(always)]
68    #[must_use]
69    pub const fn reset_written(&self) -> usize {
70        self.reset_written
71    }
72
73    /// Returns the number of finish values written to caller storage.
74    ///
75    /// # Returns
76    ///
77    /// Returns the initialized finish output length.
78    #[inline(always)]
79    #[must_use]
80    pub const fn finish_written(&self) -> usize {
81        self.finish_written
82    }
83
84    /// Consumes this progress and returns its components.
85    ///
86    /// # Returns
87    ///
88    /// Returns the main value, reset output length, and finish output length.
89    #[inline(always)]
90    #[must_use]
91    pub fn into_parts(self) -> (V, usize, usize) {
92        (self.value, self.reset_written, self.finish_written)
93    }
94}