use crate::{cli::Unit, validation::Value};
use temp_converter::TemperatureConversion;
pub fn transform_value(val: Value, from: Unit, to: Unit) -> Value {
match from {
Unit::Kelvin => match to {
Unit::Kelvin => val,
Unit::Celsius => match val {
Value::F32(num) => num.kelvin_to_celsius().into(),
Value::F64(num) => num.kelvin_to_celsius().into(),
},
Unit::Fahrenheit => match val {
Value::F32(num) => num.kelvin_to_fahrenheit().into(),
Value::F64(num) => num.kelvin_to_fahrenheit().into(),
},
},
Unit::Celsius => match to {
Unit::Celsius => val,
Unit::Kelvin => match val {
Value::F32(num) => num.celsius_to_kelvin().into(),
Value::F64(num) => num.celsius_to_kelvin().into(),
},
Unit::Fahrenheit => match val {
Value::F32(num) => num.celsius_to_fahrenheit().into(),
Value::F64(num) => num.celsius_to_kelvin().into(),
},
},
Unit::Fahrenheit => match to {
Unit::Fahrenheit => val,
Unit::Kelvin => match val {
Value::F32(num) => num.fahrenheit_to_kelvin().into(),
Value::F64(num) => num.fahrenheit_to_kelvin().into(),
},
Unit::Celsius => match val {
Value::F32(num) => num.fahrenheit_to_celsius().into(),
Value::F64(num) => num.fahrenheit_to_celsius().into(),
},
},
}
}