use std::fmt;
use uom::si::{electric_current::ampere, electric_potential::volt, f32::*, power::watt};
#[derive(PartialEq, Debug)]
pub enum Unit {
V(ElectricPotential),
A(ElectricCurrent),
W(Power),
J,
}
impl fmt::Display for Unit {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Unit::V(v) => {
let val = v.get::<volt>() as f32;
if val >= 1.0e3 {
write!(f, "{:.3} kV", val / 1.0e3)
} else if val <= 1.0e-3 {
write!(f, "{:.3} mV", val * 1.0e3)
} else {
write!(f, "{:.3} V", val)
}
}
Unit::A(a) => {
let val = a.get::<ampere>() as f32;
if val >= 1.0e3 {
write!(f, "{:.3} kA", val / 1.0e3)
} else if val <= 1.0e-3 {
write!(f, "{:.3} mA", val * 1.0e3)
} else {
write!(f, "{:.3} A", val)
}
}
Unit::W(w) => {
let val = w.get::<watt>() as f32;
if val >= 1.0e3 {
write!(f, "{:.3} kW", val / 1.0e3)
} else if val <= 1.0e-3 {
write!(f, "{:.3} mW", val * 1.0e3)
} else {
write!(f, "{:.3} W", val)
}
}
_ => write!(f, "N/A"),
}
}
}