pub mod angle;
pub mod angle_solid;
pub mod catalytic_activity;
pub mod electrical_capacitance;
pub mod electrical_charge;
pub mod electrical_conductance;
pub mod electrical_current;
pub mod electrical_inductance;
pub mod electrical_potential;
pub mod electrical_resistance;
pub mod energy;
pub mod force;
pub mod frequency;
pub mod illuminance;
pub mod information;
pub mod length;
pub mod luminous_flux;
pub mod luminous_intensity;
pub mod magnetic_flux;
pub mod magnetic_flux_density;
pub mod mass;
pub mod metric;
pub mod power;
pub mod pressure;
pub mod radiation_absorbed_dose;
pub mod radiation_equivalent_dose;
pub mod radioactivity;
pub mod sound;
pub mod substance;
pub mod temperature;
pub mod time;
pub mod unitless;
pub mod volume;
use serde::{Deserialize, Serialize};
#[derive(Debug, PartialOrd, Eq, PartialEq, Copy, Clone, Default, Serialize, Deserialize)]
pub enum Metric {
Quecto,
Ronto,
Yocto,
Zepto,
Atto,
Femto,
Pico,
Nano,
Micro,
Milli,
Centi,
Deci,
#[default]
None,
Deca,
Hecto,
Kilo,
Mega,
Giga,
Tera,
Peta,
Exa,
Zetta,
Yotta,
Ronna,
Quetta,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitSolidAngle {
Steradian(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitAngle {
Degree,
Radian(Metric),
Moa,
ArcSec(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitCatalyticActivity {
Katal(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricCapacitance {
Farad(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricCharge {
Coulomb(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricConductance {
Siemens(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricCurrent {
Ampere(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricInductance {
Henry(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricPotential {
Volt(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitElectricResistance {
Ohm(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitEnergy {
Joule(Metric),
GramCalorie(Metric),
FootPound,
ElectronVolt(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitForce {
Newton(Metric),
PoundForce,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitFrequency {
Hertz(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitIlluminance {
Lux(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitInformation {
Bit(Metric),
Byte(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitLength {
Meter(Metric),
Inch,
Foot,
Yard,
Mile,
AstronomicalUnit,
Parsec(Metric),
LightYear(Metric),
Angstrom,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitLuminousFlux {
Lumen(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitLuminousIntensity {
Candela(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitMagneticFluxDensity {
Tesla(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitMagneticFlux {
Weber(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitMass {
Gram(Metric),
Grain,
Ounce,
Pound,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitPower {
Watt(Metric),
Horsepower,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitPressure {
Pascal(Metric),
Bar(Metric),
Torr,
Hgmm,
Hgcm,
Hgin,
Atm,
Psi,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitAbsorbedDose {
Gray(Metric),
Roentgen,
Rad,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitRadioactivityExposure {
Sievert(Metric),
Rem,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitRadioactivity {
Becquerel(Metric),
Curie,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitSound {
Bel(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitSubstance {
Mole(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitTemperature {
Celsius(Metric),
Fahrenheit,
Kelvin(Metric),
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitTime {
Second(Metric),
Minute,
Hour,
Day,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitNone {
Percentage,
None,
}
#[derive(Debug, Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub enum UnitVolume {
Liter(Metric),
}
pub trait Convert<T> {
fn convert(&self, other: &T) -> f64;
}
pub trait BaseUnit {
fn scale(&self) -> f64;
fn base(&self) -> f64;
fn get_metric(&self) -> Metric;
}
#[cfg(test)]
mod units_unit_test {
use crate::units::UnitPressure;
use crate::units::{BaseUnit, Metric};
#[test]
fn unit_get_metric() {
let t = UnitPressure::Bar(Metric::Exa);
assert_eq!(t.get_metric(), Metric::Exa);
}
}