Skip to main content

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}