degrees 0.6.0

Easily work with and compare temeratures in different units
Documentation
use crate::Temp;

impl PartialOrd for Temp {
    fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
        let source: f32 = (*self).as_c().into();
        let target: f32 = (*other).as_c().into();

        let mut res = std::cmp::Ordering::Equal;

        if source > target {
            res = std::cmp::Ordering::Greater;
        } else if source < target {
            res = std::cmp::Ordering::Less;
        }

        Some(res)
    }
}

impl PartialEq for Temp {
    fn eq(&self, other: &Self) -> bool {
        let source: f32 = (*self).as_c().into();
        let target: f32 = (*other).as_c().into();

        source == target
    }
}

#[cfg(test)]
mod tests {
    use serde::{Deserialize, Serialize};
    use std::fs;

    use super::*;

    #[test]
    fn equal() {
        assert_eq!(Temp::F(86.) == Temp::C(30.), true);
        assert_eq!(Temp::F(86.) == Temp::K(303.15), true);
        assert_eq!(Temp::C(30.) == Temp::K(303.15), true);
    }

    #[test]
    fn gte() {
        assert_eq!(Temp::F(85.) >= Temp::F(80.), true);
    }

    #[test]
    fn lte() {
        assert_eq!(Temp::F(85.) <= Temp::F(112.), true);
        assert_eq!(Temp::F(85.) <= Temp::F(87.), true);
    }

    #[test]
    fn should_be_gt() {
        assert_eq!(Temp::F(86.) > Temp::C(0.), true);
        assert_eq!(Temp::F(86.) > Temp::C(100.), false);
    }

    #[derive(Debug, Serialize, Deserialize)]
    struct TestData {
        temperatureconversions: Vec<Conversion>,
    }

    #[derive(Debug, Serialize, Deserialize)]
    struct Conversion {
        celsius: f32,
        fahrenheit: f32,
        kelvin: f32,
    }

    #[test]
    fn should_convert_correctly() {
        let data_string = fs::read_to_string("data/conversions.json").unwrap();
        let data = serde_json::from_str::<TestData>(data_string.as_str()).unwrap();

        for entry in data.temperatureconversions {
            assert!(Temp::F(entry.fahrenheit) == Temp::C(entry.celsius));
            assert!(Temp::F(entry.fahrenheit) == Temp::K(entry.kelvin));

            assert!(Temp::C(entry.celsius) == Temp::F(entry.fahrenheit));
            assert!(Temp::C(entry.celsius) == Temp::K(entry.kelvin));

            assert!(Temp::K(entry.kelvin) == Temp::F(entry.fahrenheit));
            assert!(Temp::K(entry.kelvin) == Temp::C(entry.celsius));
        }
    }
}