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(value: V, reset_written: usize, finish_written: usize) -> Self {
40        Self {
41            value,
42            reset_written,
43            finish_written,
44        }
45    }
46
47    /// Returns the main value decoded from the supplied input.
48    ///
49    /// # Returns
50    ///
51    /// Returns a shared reference to the main decoded value.
52    #[inline(always)]
53    #[must_use]
54    pub const fn value(&self) -> &V {
55        &self.value
56    }
57
58    /// Returns the number of reset values written to caller storage.
59    ///
60    /// # Returns
61    ///
62    /// Returns the initialized reset output length.
63    #[inline(always)]
64    #[must_use]
65    pub const fn reset_written(&self) -> usize {
66        self.reset_written
67    }
68
69    /// Returns the number of finish values written to caller storage.
70    ///
71    /// # Returns
72    ///
73    /// Returns the initialized finish output length.
74    #[inline(always)]
75    #[must_use]
76    pub const fn finish_written(&self) -> usize {
77        self.finish_written
78    }
79
80    /// Consumes this progress and returns its components.
81    ///
82    /// # Returns
83    ///
84    /// Returns the main value, reset output length, and finish output length.
85    #[inline(always)]
86    #[must_use]
87    pub fn into_parts(self) -> (V, usize, usize) {
88        (self.value, self.reset_written, self.finish_written)
89    }
90}