#[macro_use]
mod prefix;
system! {
quantities: ISQ {
length: meter, L;
mass: kilogram, M;
time: second, T;
electric_current: ampere, I;
thermodynamic_temperature: kelvin, Th;
amount_of_substance: mole, N;
luminous_intensity: candela, J;
}
units: SI {
acceleration::Acceleration,
amount_of_substance::AmountOfSubstance,
angle::Angle,
angular_acceleration::AngularAcceleration,
angular_jerk::AngularJerk,
angular_velocity::AngularVelocity,
area::Area,
available_energy::AvailableEnergy,
capacitance::Capacitance,
catalytic_activity::CatalyticActivity,
catalytic_activity_concentration::CatalyticActivityConcentration,
curvature::Curvature,
electric_charge::ElectricCharge,
electric_current::ElectricCurrent,
electric_potential::ElectricPotential,
electrical_conductance::ElectricalConductance,
electrical_resistance::ElectricalResistance,
energy::Energy,
force::Force,
frequency::Frequency,
heat_capacity::HeatCapacity,
heat_flux_density::HeatFluxDensity,
heat_transfer::HeatTransfer,
inductance::Inductance,
information::Information,
information_rate::InformationRate,
jerk::Jerk,
length::Length,
luminance::Luminance,
luminous_intensity::LuminousIntensity,
magnetic_flux::MagneticFlux,
magnetic_flux_density::MagneticFluxDensity,
mass::Mass,
mass_concentration::MassConcentration,
mass_density::MassDensity,
mass_rate::MassRate,
molar_concentration::MolarConcentration,
molar_energy::MolarEnergy,
molar_mass::MolarMass,
momentum::Momentum,
power::Power,
pressure::Pressure,
ratio::Ratio,
specific_heat_capacity::SpecificHeatCapacity,
solid_angle::SolidAngle,
radiant_exposure::RadiantExposure,
temperature_interval::TemperatureInterval,
thermal_conductivity::ThermalConductivity,
thermodynamic_temperature::ThermodynamicTemperature,
time::Time,
torque::Torque,
velocity::Velocity,
volume::Volume,
volume_rate::VolumeRate,
}
}
pub mod quantities {
ISQ!(crate::si);
}
storage_types! {
pub types: All;
ISQ!(crate::si, V);
}
pub mod marker {
use super::{Dimension, Quantity, Units};
use crate::Kind;
#[cfg_attr(feature = "f32", doc = " ```rust")]
#[cfg_attr(not(feature = "f32"), doc = " ```rust,ignore")]
pub trait AngleKind: Kind {}
#[cfg_attr(feature = "f32", doc = " ```rust")]
#[cfg_attr(not(feature = "f32"), doc = " ```rust,ignore")]
pub trait SolidAngleKind: Kind {}
#[cfg_attr(feature = "f32", doc = " ```rust")]
#[cfg_attr(not(feature = "f32"), doc = " ```rust,ignore")]
pub trait InformationKind: Kind {}
pub trait TemperatureKind:
crate::marker::Mul
+ crate::marker::MulAssign
+ crate::marker::Div
+ crate::marker::DivAssign
+ crate::marker::Rem
+ crate::marker::RemAssign
{
}
pub trait ConstituentConcentrationKind: Kind {}
#[cfg(feature = "autoconvert")]
#[macro_export]
macro_rules! impl_from {
($a:ident, $b:ident) => {
impl<L, M, T, I, Th, N, J, Ul, Ur, V>
From<
Quantity<
dyn Dimension<
L = L,
M = M,
T = T,
I = I,
Th = Th,
N = N,
J = J,
Kind = dyn $a,
>,
Ur,
V,
>,
>
for Quantity<
dyn Dimension<L = L, M = M, T = T, I = I, Th = Th, N = N, J = J, Kind = dyn $b>,
Ul,
V,
>
where
L: crate::typenum::Integer,
M: crate::typenum::Integer,
T: crate::typenum::Integer,
I: crate::typenum::Integer,
Th: crate::typenum::Integer,
N: crate::typenum::Integer,
J: crate::typenum::Integer,
Ul: Units<V> + ?Sized,
Ur: Units<V> + ?Sized,
V: crate::num_traits::Num + crate::Conversion<V>,
{
fn from(
val: Quantity<
dyn Dimension<
L = L,
M = M,
T = T,
I = I,
Th = Th,
N = N,
J = J,
Kind = dyn $a,
>,
Ur,
V,
>,
) -> Quantity<
dyn Dimension<L = L, M = M, T = T, I = I, Th = Th, N = N, J = J, Kind = dyn $b>,
Ul,
V,
> {
Self {
dimension: crate::lib::marker::PhantomData,
units: crate::lib::marker::PhantomData,
value: super::change_base::<
dyn Dimension<
L = L,
M = M,
T = T,
I = I,
Th = Th,
N = N,
J = J,
Kind = dyn $b,
>,
Ul,
Ur,
V,
>(&val.value),
}
}
}
};
}
#[cfg(not(feature = "autoconvert"))]
#[macro_export]
macro_rules! impl_from {
($a:ident, $b:ident) => {
impl<L, M, T, I, Th, N, J, U, V>
From<
Quantity<
dyn Dimension<
L = L,
M = M,
T = T,
I = I,
Th = Th,
N = N,
J = J,
Kind = dyn $a,
>,
U,
V,
>,
>
for Quantity<
dyn Dimension<L = L, M = M, T = T, I = I, Th = Th, N = N, J = J, Kind = dyn $b>,
U,
V,
>
where
L: crate::typenum::Integer,
M: crate::typenum::Integer,
T: crate::typenum::Integer,
I: crate::typenum::Integer,
Th: crate::typenum::Integer,
N: crate::typenum::Integer,
J: crate::typenum::Integer,
U: Units<V> + ?Sized,
V: crate::num_traits::Num + crate::Conversion<V>,
{
fn from(
val: Quantity<
dyn Dimension<
L = L,
M = M,
T = T,
I = I,
Th = Th,
N = N,
J = J,
Kind = dyn $a,
>,
U,
V,
>,
) -> Quantity<
dyn Dimension<L = L, M = M, T = T, I = I, Th = Th, N = N, J = J, Kind = dyn $b>,
U,
V,
> {
Self {
dimension: crate::lib::marker::PhantomData,
units: crate::lib::marker::PhantomData,
value: val.value,
}
}
}
};
}
impl_from!(AngleKind, Kind);
impl_from!(Kind, AngleKind);
impl_from!(SolidAngleKind, Kind);
impl_from!(Kind, SolidAngleKind);
impl_from!(InformationKind, Kind);
impl_from!(Kind, InformationKind);
impl_from!(ConstituentConcentrationKind, Kind);
impl_from!(Kind, ConstituentConcentrationKind);
}