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}