unitx_core/
temperature.rs1#[derive(Clone, Copy, Debug)]
2pub enum TemperatureUnit {
3 C,
4 F,
5 K,
6}
7
8impl TemperatureUnit {
9 pub fn parse(s: &str) -> Option<Self> {
10 match s.to_ascii_uppercase().as_str() {
11 "C" => Some(Self::C),
12 "F" => Some(Self::F),
13 "K" => Some(Self::K),
14 _ => None,
15 }
16 }
17}
18
19pub fn convert(value: f64, from: TemperatureUnit, to: TemperatureUnit) -> f64 {
20 let k = match from {
22 TemperatureUnit::C => value + 273.15,
23 TemperatureUnit::F => (value - 32.0) * 5.0 / 9.0 + 273.15,
24 TemperatureUnit::K => value,
25 };
26 match to {
28 TemperatureUnit::C => k - 273.15,
29 TemperatureUnit::F => (k - 273.15) * 9.0 / 5.0 + 32.0,
30 TemperatureUnit::K => k,
31 }
32}