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}