qubit_codec/transcode/engine/transcode_convert_engine_error.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//! Domain error reported by buffered convert engines.
9
10use thiserror::Error;
11
12/// Error reported by [`crate::TranscodeConvertEngine`].
13///
14/// Conversion owns both a decode side and an encode side. This type preserves
15/// which side produced the domain error while framework buffer failures remain
16/// in [`crate::TranscodeError`].
17///
18/// # Type Parameters
19///
20/// - `D`: Decode-side engine error type.
21/// - `E`: Encode-side engine error type.
22#[derive(Clone, Copy, Debug, Eq, Error, Hash, PartialEq)]
23pub enum TranscodeConvertEngineError<D, E> {
24 /// Source decoding failed.
25 #[error("decode side failed: {0}")]
26 Decode(#[source] D),
27
28 /// Target encoding failed.
29 #[error("encode side failed: {0}")]
30 Encode(#[source] E),
31}
32
33impl<D, E> TranscodeConvertEngineError<D, E> {
34 /// Creates a converter error from the decode side.
35 ///
36 /// # Parameters
37 ///
38 /// - `error`: Decode-side engine error.
39 ///
40 /// # Returns
41 ///
42 /// Returns a converter decode error.
43 #[inline(always)]
44 #[must_use]
45 pub const fn decode(error: D) -> Self {
46 Self::Decode(error)
47 }
48
49 /// Creates a converter error from the encode side.
50 ///
51 /// # Parameters
52 ///
53 /// - `error`: Encode-side engine error.
54 ///
55 /// # Returns
56 ///
57 /// Returns a converter encode error.
58 #[inline(always)]
59 #[must_use]
60 pub const fn encode(error: E) -> Self {
61 Self::Encode(error)
62 }
63}