105 lines
2.9 KiB
Rust
105 lines
2.9 KiB
Rust
//! Error types for fluid properties calculations.
|
|
//!
|
|
//! This module defines the `FluidError` enum that represents all possible errors
|
|
//! that can occur when querying fluid properties.
|
|
|
|
use thiserror::Error;
|
|
|
|
/// Errors that can occur when working with fluid properties.
|
|
#[derive(Error, Debug, Clone)]
|
|
pub enum FluidError {
|
|
/// The requested fluid is not available in the backend.
|
|
#[error("Fluid `{fluid}` not found")]
|
|
UnknownFluid {
|
|
/// The fluid identifier that was requested
|
|
fluid: String,
|
|
},
|
|
|
|
/// The thermodynamic state is invalid for the requested property.
|
|
#[error("Invalid state for property calculation: {reason}")]
|
|
InvalidState {
|
|
/// The reason why the state is invalid
|
|
reason: String,
|
|
},
|
|
|
|
/// Error from CoolProp C++ library.
|
|
#[error("CoolProp error: {0}")]
|
|
CoolPropError(String),
|
|
|
|
/// Critical point data is not available for the given fluid.
|
|
#[error("Critical point not available for `{fluid}`")]
|
|
NoCriticalPoint {
|
|
/// The fluid identifier that was requested
|
|
fluid: String,
|
|
},
|
|
|
|
/// The requested property is not supported by this backend.
|
|
#[error("Property `{property}` not supported")]
|
|
UnsupportedProperty {
|
|
/// The property that is not supported
|
|
property: String,
|
|
},
|
|
|
|
/// Numerical error during calculation (overflow, NaN, etc).
|
|
#[error("Numerical error: {0}")]
|
|
NumericalError(String),
|
|
|
|
/// State is outside the tabular data bounds.
|
|
#[error("State ({p:.2} Pa, {t:.2} K) outside table bounds for fluid `{fluid}`")]
|
|
OutOfBounds {
|
|
/// Fluid identifier
|
|
fluid: String,
|
|
/// Pressure in Pa
|
|
p: f64,
|
|
/// Temperature in K
|
|
t: f64,
|
|
},
|
|
|
|
/// Table file could not be found or loaded.
|
|
#[error("Table file not found: {path}")]
|
|
TableNotFound {
|
|
/// Path that was attempted
|
|
path: String,
|
|
},
|
|
|
|
/// Mixture is not supported by the backend.
|
|
#[error("Mixture not supported: {0}")]
|
|
MixtureNotSupported(String),
|
|
}
|
|
|
|
/// Result type alias for fluid operations.
|
|
pub type FluidResult<T> = Result<T, FluidError>;
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
|
|
#[test]
|
|
fn test_unknown_fluid_error() {
|
|
let err = FluidError::UnknownFluid {
|
|
fluid: "R999".to_string(),
|
|
};
|
|
assert_eq!(format!("{}", err), "Fluid `R999` not found");
|
|
}
|
|
|
|
#[test]
|
|
fn test_invalid_state_error() {
|
|
let err = FluidError::InvalidState {
|
|
reason: "Pressure below triple point".to_string(),
|
|
};
|
|
assert_eq!(
|
|
format!("{}", err),
|
|
"Invalid state for property calculation: Pressure below triple point"
|
|
);
|
|
}
|
|
|
|
#[test]
|
|
fn test_error_clone() {
|
|
let err1 = FluidError::UnknownFluid {
|
|
fluid: "R134a".to_string(),
|
|
};
|
|
let err2 = err1.clone();
|
|
assert_eq!(format!("{}", err1), format!("{}", err2));
|
|
}
|
|
}
|