Skip to main content

qubit_budget/resource/error/
quantity_conversion_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//! Defines failures converting native measurements into resource quantities.
9// qubit-style: allow source-test-pair
10
11use crate::resource::QuantityMeasurement;
12
13/// Error returned when a native measurement cannot fit the selected quantity.
14///
15/// # Examples
16///
17/// ```
18/// use qubit_budget::QuantityConversionError;
19/// use qubit_budget::QuantityMeasurement;
20///
21/// let error = QuantityConversionError::new(QuantityMeasurement::Usize(256), "u8");
22/// assert_eq!(error.target(), "u8");
23/// ```
24#[must_use]
25#[derive(Debug, Clone, Copy, PartialEq, Eq, thiserror::Error)]
26#[error("measurement {measurement} cannot be represented by {target}")]
27pub struct QuantityConversionError {
28    /// Original native measurement retained without truncation.
29    measurement: QuantityMeasurement,
30    /// Name of the selected resource quantity type.
31    target: &'static str,
32}
33
34impl QuantityConversionError {
35    /// Creates one quantity representation failure.
36    ///
37    /// # Parameters
38    ///
39    /// * `measurement` - Original native measurement that did not fit.
40    /// * `target` - Name of the selected resource quantity type.
41    ///
42    /// # Returns
43    ///
44    /// A failure retaining both the original measurement and target type.
45    #[inline(always)]
46    pub const fn new(measurement: QuantityMeasurement, target: &'static str) -> Self {
47        Self { measurement, target }
48    }
49
50    /// Returns the native measurement that could not be represented.
51    ///
52    /// # Returns
53    ///
54    /// Returns the native measurement that could not be represented.
55    #[must_use]
56    #[inline(always)]
57    pub const fn measurement(&self) -> QuantityMeasurement {
58        self.measurement
59    }
60
61    /// Returns the selected resource quantity type name.
62    ///
63    /// # Returns
64    ///
65    /// Returns the selected resource quantity type name.
66    #[must_use]
67    #[inline(always)]
68    pub const fn target(&self) -> &'static str {
69        self.target
70    }
71}