pub mod kilograms {
pub fn to_pounds(value: f64) -> f64 {
value * 2.20462
}
pub fn to_grams(value: f64) -> f64 {
value * 1000.0
}
pub fn to_ounces(value: f64) -> f64 {
value * 35.274
}
pub fn to_tons(value: f64) -> f64 {
value / 1000.0
}
pub fn to_stones(value: f64) -> f64 {
value / 6.35029
}
}
pub mod pounds {
pub fn to_kilograms(value: f64) -> f64 {
value / 2.20462
}
pub fn to_grams(value: f64) -> f64 {
super::kilograms::to_grams(to_kilograms(value))
}
pub fn to_ounces(value: f64) -> f64 {
value * 16.0
}
pub fn to_tons(value: f64) -> f64 {
super::kilograms::to_tons(to_kilograms(value))
}
pub fn to_stones(value: f64) -> f64 {
value / 14.0
}
}
pub mod grams {
pub fn to_kilograms(value: f64) -> f64 {
value / 1000.0
}
pub fn to_pounds(value: f64) -> f64 {
super::kilograms::to_pounds(to_kilograms(value))
}
pub fn to_ounces(value: f64) -> f64 {
value / 28.3495
}
pub fn to_tons(value: f64) -> f64 {
value / 1000000.0
}
pub fn to_stones(value: f64) -> f64 {
super::kilograms::to_stones(to_kilograms(value))
}
}
pub mod ounces {
pub fn to_kilograms(value: f64) -> f64 {
value / 35.274
}
pub fn to_pounds(value: f64) -> f64 {
value / 16.0
}
pub fn to_grams(value: f64) -> f64 {
value * 28.3495
}
pub fn to_tons(value: f64) -> f64 {
super::kilograms::to_tons(to_kilograms(value))
}
pub fn to_stones(value: f64) -> f64 {
super::kilograms::to_stones(to_kilograms(value))
}
}
pub mod tons {
pub fn to_kilograms(value: f64) -> f64 {
value * 1000.0
}
pub fn to_pounds(value: f64) -> f64 {
super::kilograms::to_pounds(to_kilograms(value))
}
pub fn to_grams(value: f64) -> f64 {
value * 1000000.0
}
pub fn to_ounces(value: f64) -> f64 {
super::kilograms::to_ounces(to_kilograms(value))
}
pub fn to_stones(value: f64) -> f64 {
super::kilograms::to_stones(to_kilograms(value))
}
}
pub mod stones {
pub fn to_kilograms(value: f64) -> f64 {
value * 6.35029
}
pub fn to_pounds(value: f64) -> f64 {
value * 14.0
}
pub fn to_grams(value: f64) -> f64 {
super::kilograms::to_grams(to_kilograms(value))
}
pub fn to_ounces(value: f64) -> f64 {
super::kilograms::to_ounces(to_kilograms(value))
}
pub fn to_tons(value: f64) -> f64 {
super::kilograms::to_tons(to_kilograms(value))
}
}
pub fn kilograms_to_pounds(kg: f64) -> f64 {
kilograms::to_pounds(kg)
}
pub fn pounds_to_kilograms(lbs: f64) -> f64 {
pounds::to_kilograms(lbs)
}
pub fn kilograms_to_grams(kg: f64) -> f64 {
kilograms::to_grams(kg)
}
pub fn grams_to_kilograms(grams: f64) -> f64 {
grams::to_kilograms(grams)
}
pub fn kilograms_to_ounces(kg: f64) -> f64 {
kilograms::to_ounces(kg)
}
pub fn ounces_to_kilograms(oz: f64) -> f64 {
ounces::to_kilograms(oz)
}
pub fn kilograms_to_tons(kg: f64) -> f64 {
kilograms::to_tons(kg)
}
pub fn tons_to_kilograms(tons: f64) -> f64 {
tons::to_kilograms(tons)
}
pub fn kilograms_to_stones(kg: f64) -> f64 {
kilograms::to_stones(kg)
}
pub fn stones_to_kilograms(stones: f64) -> f64 {
stones::to_kilograms(stones)
}
pub fn convert_weight(value: f64, from: &str, to: &str) -> Result<f64, String> {
let kilograms = match from.to_lowercase().as_str() {
"kg" | "kilogram" | "kilograms" => value,
"g" | "gram" | "grams" => grams_to_kilograms(value),
"lb" | "lbs" | "pound" | "pounds" => pounds_to_kilograms(value),
"oz" | "ounce" | "ounces" => ounces_to_kilograms(value),
"t" | "ton" | "tons" => tons_to_kilograms(value),
"st" | "stone" | "stones" => stones_to_kilograms(value),
_ => return Err(format!("Unknown weight unit: {}", from)),
};
let result = match to.to_lowercase().as_str() {
"kg" | "kilogram" | "kilograms" => kilograms,
"g" | "gram" | "grams" => kilograms_to_grams(kilograms),
"lb" | "lbs" | "pound" | "pounds" => kilograms_to_pounds(kilograms),
"oz" | "ounce" | "ounces" => kilograms_to_ounces(kilograms),
"t" | "ton" | "tons" => kilograms_to_tons(kilograms),
"st" | "stone" | "stones" => kilograms_to_stones(kilograms),
_ => return Err(format!("Unknown weight unit: {}", to)),
};
Ok(result)
}