mod common;
mod defined;
mod invariant;
mod request;
mod undefined;
use std::{collections::HashMap, marker::PhantomData};
use request::HumidAirUpdateRequest;
use crate::{
io::HumidAirParam,
native::CoolPropError,
state_variant::{Defined, StateVariant},
};
pub type StateResult<T> = Result<T, HumidAirStateError>;
pub type OutputResult<T> = Result<T, HumidAirOutputError>;
#[derive(Debug)]
pub struct HumidAir<S: StateVariant = Defined> {
update_request: Option<HumidAirUpdateRequest>,
outputs: HashMap<HumidAirParam, OutputResult<f64>>,
state: PhantomData<S>,
}
#[derive(Clone, Debug, Eq, PartialEq, thiserror::Error)]
pub enum HumidAirStateError {
#[error("Specified inputs (`{0:?}`, `{1:?}`, `{2:?}`) are invalid!")]
InvalidInputs(HumidAirParam, HumidAirParam, HumidAirParam),
#[error("Input values must be finite!")]
InvalidInputValue,
}
#[derive(Clone, Debug, Eq, PartialEq, thiserror::Error)]
pub enum HumidAirOutputError {
#[error("Specified output parameter `{0:?}` is not available!")]
UnavailableOutput(HumidAirParam),
#[error("Failed to calculate the output value of `{0:?}`! {1}")]
CalculationFailed(HumidAirParam, CoolPropError),
}