use qubit_datatype::{
DataConversionError,
DataType,
};
use thiserror::Error;
#[derive(Debug, Error, PartialEq, Eq)]
pub enum ValueError {
#[error("No value")]
NoValue,
#[error("Type mismatch: expected {expected}, actual {actual}")]
TypeMismatch {
expected: DataType,
actual: DataType,
},
#[error("Type conversion failed: from {from} to {to}")]
ConversionFailed {
from: DataType,
to: DataType,
},
#[error("Conversion error: {0}")]
ConversionError(String),
#[error("Index out of bounds: index {index}, length {len}")]
IndexOutOfBounds {
index: usize,
len: usize,
},
#[error("JSON serialization error: {0}")]
JsonSerializationError(String),
#[error("JSON deserialization error: {0}")]
JsonDeserializationError(String),
}
pub type ValueResult<T> = Result<T, ValueError>;
pub(crate) fn map_data_conversion_error(error: DataConversionError) -> ValueError {
match error {
DataConversionError::NoValue => ValueError::NoValue,
DataConversionError::ConversionFailed { from, to } => {
ValueError::ConversionFailed { from, to }
}
DataConversionError::ConversionError(message) => ValueError::ConversionError(message),
DataConversionError::JsonSerializationError(message) => {
ValueError::JsonSerializationError(message)
}
DataConversionError::JsonDeserializationError(message) => {
ValueError::JsonDeserializationError(message)
}
}
}