#[cfg(feature = "uom")]
use uom::si::{
f32::{
Length as UomAltitude, Pressure as UomPressure, Ratio as UomHumidity, Ratio as UomCo2,
ThermodynamicTemperature as UomTemperature,
},
length::meter,
pressure::hectopascal,
ratio::{part_per_million, percent},
thermodynamic_temperature::degree_celsius,
};
#[cfg(feature = "uom")]
pub type Co2 = UomCo2;
#[cfg(feature = "uom")]
pub type Temperature = UomTemperature;
#[cfg(feature = "uom")]
pub type Humidity = UomHumidity;
#[cfg(feature = "uom")]
pub type Pressure = UomPressure;
#[cfg(feature = "uom")]
pub type Altitude = UomAltitude;
#[cfg(feature = "uom")]
pub(crate) fn co2_from_ppm(raw: f32) -> Co2 {
Co2::new::<part_per_million>(raw)
}
#[cfg(feature = "uom")]
pub(crate) fn ppm_from_co2(co2: Co2) -> f32 {
co2.get::<part_per_million>()
}
#[cfg(feature = "uom")]
pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
Temperature::new::<degree_celsius>(raw)
}
#[cfg(feature = "uom")]
pub(crate) fn celsius_from_temperature(temperature: Temperature) -> f32 {
temperature.get::<degree_celsius>()
}
#[cfg(feature = "uom")]
pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
Humidity::new::<percent>(raw)
}
#[cfg(feature = "uom")]
pub(crate) fn hectopascal_from_pressure(pressure: Pressure) -> f32 {
pressure.get::<hectopascal>()
}
#[cfg(feature = "uom")]
#[cfg(test)]
pub(crate) fn pressure_from_hectopascal(raw: f32) -> Pressure {
Pressure::new::<hectopascal>(raw)
}
#[cfg(feature = "uom")]
pub(crate) fn altitude_from_meter(raw: f32) -> Altitude {
Altitude::new::<meter>(raw)
}
#[cfg(feature = "uom")]
pub(crate) fn meter_from_altitude(altitude: Altitude) -> f32 {
altitude.get::<meter>()
}
#[cfg(not(feature = "uom"))]
pub type Co2 = f32;
#[cfg(not(feature = "uom"))]
pub type Temperature = f32;
#[cfg(not(feature = "uom"))]
pub type Humidity = f32;
#[cfg(not(feature = "uom"))]
pub type Pressure = f32;
#[cfg(not(feature = "uom"))]
pub type Altitude = f32;
#[cfg(not(feature = "uom"))]
pub(crate) fn co2_from_ppm(raw: f32) -> Co2 {
raw
}
#[cfg(not(feature = "uom"))]
pub(crate) fn ppm_from_co2(co2: Co2) -> f32 {
co2
}
#[cfg(not(feature = "uom"))]
pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
raw
}
#[cfg(not(feature = "uom"))]
pub(crate) fn celsius_from_temperature(temperature: Temperature) -> f32 {
temperature
}
#[cfg(not(feature = "uom"))]
pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
raw
}
#[cfg(not(feature = "uom"))]
pub(crate) fn hectopascal_from_pressure(pressure: Pressure) -> f32 {
pressure
}
#[cfg(not(feature = "uom"))]
#[cfg(test)]
pub(crate) fn pressure_from_hectopascal(raw: f32) -> Pressure {
raw
}
#[cfg(not(feature = "uom"))]
pub(crate) fn altitude_from_meter(raw: f32) -> Altitude {
raw
}
#[cfg(not(feature = "uom"))]
pub(crate) fn meter_from_altitude(altitude: Altitude) -> f32 {
altitude
}
#[derive(Copy, Clone, Debug, Default, PartialEq)]
pub struct Sample {
pub co2: Co2,
pub temperature: Temperature,
pub humidity: Humidity,
}