doodle_unit_tools 0.1.0

A library for handling and working with multiple different unit types.
Documentation
/// Suported length units
#[derive(Debug, PartialEq)]
pub enum LengthUnit {
    Meter,
    Kilometer,
    Mile,
    Foot,
}

/// Converts a value from one length unit to another.
pub fn convert_length(value: f64, from: LengthUnit, to: LengthUnit) -> f64 {
    let value_in_meters = match from {
        LengthUnit::Meter => value,
        LengthUnit::Kilometer => value * 1_000.0,
        LengthUnit::Mile => value * 1_609.34,
        LengthUnit::Foot => value * 0.3048,
    };
    match to {
        LengthUnit::Meter => value_in_meters,
        LengthUnit::Kilometer => value_in_meters / 1_000.0,
        LengthUnit::Mile => value_in_meters / 1_609.34,
        LengthUnit::Foot => value_in_meters / 0.3048,
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_length_conversion() {
        assert_eq!(
            convert_length(1.0, LengthUnit::Meter, LengthUnit::Kilometer),
            0.001
        );
        assert_eq!(
            convert_length(1.0, LengthUnit::Mile, LengthUnit::Foot),
            5280.0
        );
        assert_eq!(
            convert_length(1.0, LengthUnit::Foot, LengthUnit::Meter),
            0.3048
        );
    }
}