unitforge 0.5.0

A library for unit and quantity consistent computations in Rust
Documentation
use crate::impl_macros::macros::*;

#[cfg_attr(feature = "strum", derive(EnumIter))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
#[derive(Copy, Clone, PartialEq, Debug, Hash, Eq)]
#[cfg_attr(feature = "pyo3", pyclass(eq, eq_int, from_py_object))]
pub enum DensityUnit {
    kg_dmcb,
    kg_mcb,
    g_cmcb,
    g_mcb,
    lb_ftcb,
    lb_incb,
}

impl DensityUnit {
    pub const fn base_per_x_const(self) -> (f64, i32) {
        match self {
            DensityUnit::kg_dmcb => (1.0, 3),
            DensityUnit::kg_mcb => (1.0, 0),
            DensityUnit::g_cmcb => (1.0, 3),
            DensityUnit::g_mcb => (1.0, -3),
            DensityUnit::lb_ftcb => (1.60185, 1),
            DensityUnit::lb_incb => (2.76799, 4),
        }
    }
}

impl PhysicsUnit for DensityUnit {
    fn name(&self) -> &str {
        match &self {
            DensityUnit::kg_dmcb => "kg/dm³",
            DensityUnit::kg_mcb => "kg/m³",
            DensityUnit::g_cmcb => "g/cm³",
            DensityUnit::g_mcb => "g/m³",
            DensityUnit::lb_ftcb => "lb/ft³",
            DensityUnit::lb_incb => "lb/in³",
        }
    }

    fn base_per_x(&self) -> (f64, i32) {
        (*self).base_per_x_const()
    }
}

impl_const!(Density, aluminium, "aluminium", 2.7, 3);
impl_const!(Density, water, "water", 1., 3);
impl_const!(Density, air, "air", 1.225, 0);
impl_const!(Density, steel, "steel", 7.78, 3);
impl_const!(Density, graphit, "graphit", 2.26, 3);
impl_const!(Density, diamant, "diamant", 3.51, 3);
impl_const!(Density, lithium, "lithium", 5.34, 2);
impl_const!(Density, chrome, "chrome", 7.14, 3);
impl_const!(Density, copper, "copper", 8.92, 3);
impl_const!(Density, zink, "zink", 7.14, 3);
impl_const!(Density, nickel, "nickel", 8.907, 3);
impl_const!(Density, lead, "lead", 1.1342, 4);
impl_const!(Density, beryllium, "beryllium", 1.845, 3);
impl_const!(Density, bor, "bor", 2.35, 3);
impl_const!(Density, natrium, "natrium", 9.68, 2);
impl_const!(Density, magnesium, "magnesium", 1.737, 3);
impl_const!(Density, silicium, "silicium", 2.336, 3);
impl_const!(Density, sulfur, "sulfur", 2.07, 3);
impl_const!(Density, potassium, "potassium", 8.56, 2);
impl_const!(Density, scandium, "scandium", 2.989, 3);
impl_const!(Density, titanium, "titanium", 4.5, 3);
impl_const!(Density, vanadium, "vanadium", 6.099, 3);
impl_const!(Density, manganese, "manganese", 7.476, 3);
impl_const!(Density, iron, "iron", 7.874, 3);
impl_const!(Density, cobalt, "cobalt", 8.834, 3);
impl_const!(Density, germanium, "germanium", 5.327, 3);
impl_const!(Density, arsenic, "arsenic", 5.782, 3);
impl_const!(Density, rubidium, "rubidium", 1.534, 3);
impl_const!(Density, yttrium, "yttrium", 4.469, 3);
impl_const!(Density, zirconium, "zirconium", 6.505, 3);
impl_const!(Density, niobium, "niobium", 8.582, 3);
impl_const!(Density, molybdenum, "molybdenum", 1.0223, 4);
impl_const!(Density, ruthenium, "ruthenium", 1.2364, 4);
impl_const!(Density, rhodium, "rhodium", 1.2423, 4);
impl_const!(Density, palladium, "palladium", 1.2007, 4);
impl_const!(Density, silver, "silver", 1.0503, 4);
impl_const!(Density, cadmium, "cadmium", 8.649, 3);
impl_const!(Density, indium, "indium", 7.290, 3);
impl_const!(Density, tin, "tin", 7.31, 3);
impl_const!(Density, antimony, "antimony", 6.694, 3);
impl_const!(Density, tellurium, "tellurium", 6.237, 3);
impl_const!(Density, iodine, "iodine", 4.944, 3);
impl_const!(Density, caesium, "caesium", 1.886, 3);
impl_const!(Density, barium, "barium", 3.594, 3);
impl_const!(Density, lutetium, "lutetium", 9.84, 3);
impl_const!(Density, hafnium, "hafnium", 13.281, 3);
impl_const!(Density, tantalum, "tantalum", 16.678, 3);
impl_const!(Density, tungsten, "tungsten", 1.9254, 4);
impl_const!(Density, rhenium, "rhenium", 2.1010, 4);
impl_const!(Density, osmium, "osmium", 2.2587, 4);
impl_const!(Density, iridium, "iridium", 2.2562, 4);
impl_const!(Density, platinum, "platinum", 2.1452, 4);
impl_const!(Density, gold, "gold", 1.9283, 4);
impl_const!(Density, mercury, "mercury", 1.3546, 4);
impl_const!(Density, thallium, "thallium", 1.1873, 4);
impl_const!(Density, bismuth, "bismuth", 9.807, 3);
impl_const!(Density, polonium, "polonium", 9.4, 3);
impl_const!(Density, francium, "francium", 2.458, 3);
impl_const!(Density, radium, "radium", 5.5, 3);
impl_const!(Density, lawrencium, "lawrencium", 1.44, 4);
impl_const!(Density, rutherfordium, "rutherfordium", 1.7, 4);
impl_const!(Density, cerium, "cerium", 6.7, 3);
impl_const!(Density, praseodymium, "praseodymium", 6.773, 3);
impl_const!(Density, neodymium, "neodymium", 7.007, 3);
impl_const!(Density, promethium, "promethium", 7.2, 3);
impl_const!(Density, samarium, "samarium", 7.518, 3);
impl_const!(Density, europium, "europium", 5.246, 3);
impl_const!(Density, gadolinium, "gadolinium", 7.899, 3);
impl_const!(Density, terbium, "terbium", 8.229, 3);
impl_const!(Density, dysprosium, "dysprosium", 8.55, 3);
impl_const!(Density, holmium, "holmium", 8.795, 3);
impl_const!(Density, erbium, "erbium", 9.065, 3);
impl_const!(Density, ytterbium, "ytterbium", 6.967, 3);
impl_const!(Density, actinium, "actinium", 1., 4);
impl_const!(Density, protactinium, "protactinium", 1.543, 4);
impl_const!(Density, uranium, "uranium", 1.905, 4);
impl_const!(Density, neptunium, "neptunium", 2.048, 4);
impl_const!(Density, plutonium, "plutonium", 1.985, 4);
impl_const!(Density, americium, "americium", 12., 4);
impl_const!(Density, curium, "curium", 13.51, 4);

impl_quantity!(Density, DensityUnit, [DensityUnit::kg_dmcb]);
impl_div_with_self_to_f64!(Density);