unitforge 0.3.19

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))]
pub enum VolumeUnit {
    kmcb,
    mcb,
    dmcb,
    l,
    cmcb,
    mmcb,
    mumcb,
    incb,
    ftcb,
    ydcb,
    impgal,
}

impl PhysicsUnit for VolumeUnit {
    fn name(&self) -> &str {
        match self {
            VolumeUnit::kmcb => "km³",
            VolumeUnit::mcb => "",
            VolumeUnit::dmcb => "dm³",
            VolumeUnit::l => "l",
            VolumeUnit::cmcb => "cm³",
            VolumeUnit::mmcb => "mm³",
            VolumeUnit::mumcb => "μm³",
            VolumeUnit::incb => "in³",
            VolumeUnit::ftcb => "ft³",
            VolumeUnit::ydcb => "yd³",
            VolumeUnit::impgal => "imp gal",
        }
    }

    fn base_per_x(&self) -> (f64, i32) {
        match self {
            VolumeUnit::kmcb => (1.0, 9),
            VolumeUnit::mcb => (1.0, 0),
            VolumeUnit::dmcb => (1.0, -3),
            VolumeUnit::l => (1.0, -3),
            VolumeUnit::cmcb => (1.0, -6),
            VolumeUnit::mmcb => (1.0, -9),
            VolumeUnit::mumcb => (1.0, -18),
            VolumeUnit::incb => (1.6387064, -5),
            VolumeUnit::ftcb => (2.8316846592, -2),
            VolumeUnit::ydcb => (7.64554857984, -1),
            VolumeUnit::impgal => (3.78541, -3),
        }
    }
}

impl_quantity!(Volume, VolumeUnit, [VolumeUnit::dmcb]);
impl_div_with_self_to_f64!(Volume);