pub mod meters {
pub fn to_feet(value: f64) -> f64 {
value * 3.28084
}
pub fn to_inches(value: f64) -> f64 {
value * 39.3701
}
pub fn to_kilometers(value: f64) -> f64 {
value / 1000.0
}
pub fn to_centimeters(value: f64) -> f64 {
value * 100.0
}
pub fn to_millimeters(value: f64) -> f64 {
value * 1000.0
}
pub fn to_yards(value: f64) -> f64 {
value * 1.09361
}
pub fn to_miles(value: f64) -> f64 {
value / 1609.34
}
}
pub mod feet {
pub fn to_meters(value: f64) -> f64 {
value / 3.28084
}
pub fn to_inches(value: f64) -> f64 {
value * 12.0
}
pub fn to_yards(value: f64) -> f64 {
value / 3.0
}
pub fn to_miles(value: f64) -> f64 {
value / 5280.0
}
pub fn to_centimeters(value: f64) -> f64 {
super::meters::to_centimeters(to_meters(value))
}
pub fn to_millimeters(value: f64) -> f64 {
super::meters::to_millimeters(to_meters(value))
}
pub fn to_kilometers(value: f64) -> f64 {
super::meters::to_kilometers(to_meters(value))
}
}
pub mod inches {
pub fn to_meters(value: f64) -> f64 {
value / 39.3701
}
pub fn to_feet(value: f64) -> f64 {
value / 12.0
}
pub fn to_yards(value: f64) -> f64 {
value / 36.0
}
pub fn to_centimeters(value: f64) -> f64 {
value * 2.54
}
pub fn to_millimeters(value: f64) -> f64 {
value * 25.4
}
pub fn to_kilometers(value: f64) -> f64 {
super::meters::to_kilometers(to_meters(value))
}
pub fn to_miles(value: f64) -> f64 {
super::meters::to_miles(to_meters(value))
}
}
pub mod kilometers {
pub fn to_meters(value: f64) -> f64 {
value * 1000.0
}
pub fn to_feet(value: f64) -> f64 {
super::meters::to_feet(to_meters(value))
}
pub fn to_inches(value: f64) -> f64 {
super::meters::to_inches(to_meters(value))
}
pub fn to_yards(value: f64) -> f64 {
super::meters::to_yards(to_meters(value))
}
pub fn to_miles(value: f64) -> f64 {
value / 1.60934
}
pub fn to_centimeters(value: f64) -> f64 {
value * 100000.0
}
pub fn to_millimeters(value: f64) -> f64 {
value * 1000000.0
}
}
pub mod centimeters {
pub fn to_meters(value: f64) -> f64 {
value / 100.0
}
pub fn to_feet(value: f64) -> f64 {
super::meters::to_feet(to_meters(value))
}
pub fn to_inches(value: f64) -> f64 {
value / 2.54
}
pub fn to_yards(value: f64) -> f64 {
super::meters::to_yards(to_meters(value))
}
pub fn to_miles(value: f64) -> f64 {
super::meters::to_miles(to_meters(value))
}
pub fn to_kilometers(value: f64) -> f64 {
value / 100000.0
}
pub fn to_millimeters(value: f64) -> f64 {
value * 10.0
}
}
pub mod millimeters {
pub fn to_meters(value: f64) -> f64 {
value / 1000.0
}
pub fn to_feet(value: f64) -> f64 {
super::meters::to_feet(to_meters(value))
}
pub fn to_inches(value: f64) -> f64 {
value / 25.4
}
pub fn to_yards(value: f64) -> f64 {
super::meters::to_yards(to_meters(value))
}
pub fn to_miles(value: f64) -> f64 {
super::meters::to_miles(to_meters(value))
}
pub fn to_kilometers(value: f64) -> f64 {
value / 1000000.0
}
pub fn to_centimeters(value: f64) -> f64 {
value / 10.0
}
}
pub mod yards {
pub fn to_meters(value: f64) -> f64 {
value / 1.09361
}
pub fn to_feet(value: f64) -> f64 {
value * 3.0
}
pub fn to_inches(value: f64) -> f64 {
value * 36.0
}
pub fn to_miles(value: f64) -> f64 {
value / 1760.0
}
pub fn to_kilometers(value: f64) -> f64 {
super::meters::to_kilometers(to_meters(value))
}
pub fn to_centimeters(value: f64) -> f64 {
super::meters::to_centimeters(to_meters(value))
}
pub fn to_millimeters(value: f64) -> f64 {
super::meters::to_millimeters(to_meters(value))
}
}
pub mod miles {
pub fn to_meters(value: f64) -> f64 {
value * 1609.34
}
pub fn to_feet(value: f64) -> f64 {
value * 5280.0
}
pub fn to_inches(value: f64) -> f64 {
value * 63360.0
}
pub fn to_yards(value: f64) -> f64 {
value * 1760.0
}
pub fn to_kilometers(value: f64) -> f64 {
value * 1.60934
}
pub fn to_centimeters(value: f64) -> f64 {
super::meters::to_centimeters(to_meters(value))
}
pub fn to_millimeters(value: f64) -> f64 {
super::meters::to_millimeters(to_meters(value))
}
}
pub fn meters_to_feet(meters: f64) -> f64 {
meters::to_feet(meters)
}
pub fn feet_to_meters(feet: f64) -> f64 {
feet::to_meters(feet)
}
pub fn meters_to_inches(meters: f64) -> f64 {
meters::to_inches(meters)
}
pub fn inches_to_meters(inches: f64) -> f64 {
inches::to_meters(inches)
}
pub fn meters_to_kilometers(meters: f64) -> f64 {
meters::to_kilometers(meters)
}
pub fn kilometers_to_meters(kilometers: f64) -> f64 {
kilometers::to_meters(kilometers)
}
pub fn meters_to_centimeters(meters: f64) -> f64 {
meters::to_centimeters(meters)
}
pub fn centimeters_to_meters(centimeters: f64) -> f64 {
centimeters::to_meters(centimeters)
}
pub fn meters_to_millimeters(meters: f64) -> f64 {
meters::to_millimeters(meters)
}
pub fn millimeters_to_meters(millimeters: f64) -> f64 {
millimeters::to_meters(millimeters)
}
pub fn meters_to_yards(meters: f64) -> f64 {
meters::to_yards(meters)
}
pub fn yards_to_meters(yards: f64) -> f64 {
yards::to_meters(yards)
}
pub fn meters_to_miles(meters: f64) -> f64 {
meters::to_miles(meters)
}
pub fn miles_to_meters(miles: f64) -> f64 {
miles::to_meters(miles)
}
pub fn convert_length(value: f64, from: &str, to: &str) -> Result<f64, String> {
let meters = match from.to_lowercase().as_str() {
"m" | "meter" | "meters" => value,
"km" | "kilometer" | "kilometers" => kilometers_to_meters(value),
"cm" | "centimeter" | "centimeters" => centimeters_to_meters(value),
"mm" | "millimeter" | "millimeters" => millimeters_to_meters(value),
"ft" | "foot" | "feet" => feet_to_meters(value),
"in" | "inch" | "inches" => inches_to_meters(value),
"yd" | "yard" | "yards" => yards_to_meters(value),
"mi" | "mile" | "miles" => miles_to_meters(value),
_ => return Err(format!("Unknown length unit: {}", from)),
};
let result = match to.to_lowercase().as_str() {
"m" | "meter" | "meters" => meters,
"km" | "kilometer" | "kilometers" => meters_to_kilometers(meters),
"cm" | "centimeter" | "centimeters" => meters_to_centimeters(meters),
"mm" | "millimeter" | "millimeters" => meters_to_millimeters(meters),
"ft" | "foot" | "feet" => meters_to_feet(meters),
"in" | "inch" | "inches" => meters_to_inches(meters),
"yd" | "yard" | "yards" => meters_to_yards(meters),
"mi" | "mile" | "miles" => meters_to_miles(meters),
_ => return Err(format!("Unknown length unit: {}", to)),
};
Ok(result)
}