1#[cfg(feature = "uom")]
12use uom::si::f32::Length as UomAltitude;
13#[cfg(feature = "uom")]
14use uom::si::f32::Pressure as UomPressure;
15#[cfg(feature = "uom")]
16use uom::si::f32::Ratio as UomHumidity;
17#[cfg(feature = "uom")]
18use uom::si::f32::Ratio as UomCo2;
19#[cfg(feature = "uom")]
20use uom::si::f32::ThermodynamicTemperature as UomTemperature;
21#[cfg(feature = "uom")]
22use uom::si::length::meter;
23#[cfg(feature = "uom")]
24use uom::si::pressure::hectopascal;
25#[cfg(feature = "uom")]
26use uom::si::ratio::part_per_million;
27#[cfg(feature = "uom")]
28use uom::si::ratio::percent;
29#[cfg(feature = "uom")]
30use uom::si::thermodynamic_temperature::degree_celsius;
31
32#[cfg(feature = "uom")]
33pub type Co2 = UomCo2;
35
36#[cfg(feature = "uom")]
37pub type Temperature = UomTemperature;
39
40#[cfg(feature = "uom")]
41pub type Humidity = UomHumidity;
43
44#[cfg(feature = "uom")]
45pub type Pressure = UomPressure;
47
48#[cfg(feature = "uom")]
49pub type Altitude = UomAltitude;
51
52#[cfg(feature = "uom")]
53pub(crate) fn co2_from_ppm(raw: f32) -> Co2 {
55 Co2::new::<part_per_million>(raw)
56}
57
58#[cfg(feature = "uom")]
59pub(crate) fn ppm_from_co2(co2: Co2) -> f32 {
61 co2.get::<part_per_million>()
62}
63
64#[cfg(feature = "uom")]
65pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
67 Temperature::new::<degree_celsius>(raw)
68}
69
70#[cfg(feature = "uom")]
71pub(crate) fn celsius_from_temperature(temperature: Temperature) -> f32 {
73 temperature.get::<degree_celsius>()
74}
75
76#[cfg(feature = "uom")]
77pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
79 Humidity::new::<percent>(raw)
80}
81
82#[cfg(feature = "uom")]
83pub(crate) fn hectopascal_from_pressure(pressure: Pressure) -> f32 {
85 pressure.get::<hectopascal>()
86}
87
88#[cfg(all(feature = "uom", feature = "blocking"))]
89#[cfg(test)]
90pub(crate) fn pressure_from_hectopascal(raw: f32) -> Pressure {
92 Pressure::new::<hectopascal>(raw)
93}
94
95#[cfg(feature = "uom")]
96pub(crate) fn altitude_from_meter(raw: f32) -> Altitude {
98 Altitude::new::<meter>(raw)
99}
100
101#[cfg(feature = "uom")]
102pub(crate) fn meter_from_altitude(altitude: Altitude) -> f32 {
104 altitude.get::<meter>()
105}
106
107#[cfg(not(feature = "uom"))]
108pub type Co2 = f32;
110
111#[cfg(not(feature = "uom"))]
112pub type Temperature = f32;
114
115#[cfg(not(feature = "uom"))]
116pub type Humidity = f32;
118
119#[cfg(not(feature = "uom"))]
120pub type Pressure = f32;
122
123#[cfg(not(feature = "uom"))]
124pub type Altitude = f32;
126
127#[cfg(not(feature = "uom"))]
128pub(crate) fn co2_from_ppm(raw: f32) -> Co2 {
130 raw
131}
132
133#[cfg(not(feature = "uom"))]
134pub(crate) fn ppm_from_co2(co2: Co2) -> f32 {
136 co2
137}
138
139#[cfg(not(feature = "uom"))]
140pub(crate) fn temperature_from_celsius(raw: f32) -> Temperature {
142 raw
143}
144
145#[cfg(not(feature = "uom"))]
146pub(crate) fn celsius_from_temperature(temperature: Temperature) -> f32 {
148 temperature
149}
150
151#[cfg(not(feature = "uom"))]
152pub(crate) fn humidity_from_number(raw: f32) -> Humidity {
154 raw
155}
156
157#[cfg(not(feature = "uom"))]
158pub(crate) fn hectopascal_from_pressure(pressure: Pressure) -> f32 {
160 pressure
161}
162
163#[cfg(all(not(feature = "uom"), feature = "blocking"))]
164#[cfg(test)]
165pub(crate) fn pressure_from_hectopascal(raw: f32) -> Pressure {
167 raw
168}
169
170#[cfg(not(feature = "uom"))]
171pub(crate) fn altitude_from_meter(raw: f32) -> Altitude {
173 raw
174}
175
176#[cfg(not(feature = "uom"))]
177pub(crate) fn meter_from_altitude(altitude: Altitude) -> f32 {
179 altitude
180}
181
182#[derive(Copy, Clone, Debug, Default, PartialEq)]
184pub struct Sample {
185 pub co2: Co2,
187
188 pub temperature: Temperature,
190
191 pub humidity: Humidity,
193}