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}