macro_rules! quantity { ( $(#[$quantity_attr:meta])* quantity: $quantity:ident; $description:expr; $(#[$dim_attr:meta])* dimension: $system:ident<$($dimension:ident),+>; $(kind: $kind:ty;)? units { $($(#[$unit_attr:meta])* @$unit:ident: $($conversion:expr),+; $abbreviation:expr, $singular:expr, $plural:expr;)+ } ) => { ... }; (@kind $kind:ty) => { ... }; (@kind) => { ... }; }
Expand description
Macro to implement a quantity and associated measurement units. Note
that this macro must be executed in direct submodules of the module where the system! macro
was executed. @... match arms are considered private.
$quantity_attr: Quantity attributes. Generally used to set documentation comments for the quantity.$quantity: Quantity name (e.g.Length).$description: Quantity description (e.g."length").$dim_attr: Dimension attributes. Generally used to set documentation comments for the quantity’s dimension type alias.$system: System of quantities type (e.g.ISQ).$dimension: Power of a factor for each base quantity in the system. Power should be represented as atypenumtype-level integer (e.g.N1,Z0,P1,P2, …).$kind: Kind of the quantity. Optional. This variable should only be specified when defining a quantity that has the same dimensions as another quantity but isn’t comparable. When not specifiedcrate::Kindis used.$unit: Unit name (e.g.meter,foot).$conversion: Conversion (coefficient and constant factor) from the unit to the base unit of the quantity (e.g.3.048_E-1to convertfoottometer.1.0_E0, 273.15_E0to convertcelsiustokelvin.). The coefficient is required and the constant factor is optional. Note that using a unit with a non-zero constant factor is not currently supported as a base unit.$abbreviation: Unit abbreviation (e.g."m").$singular: Singular unit description (e.g."meter").$plural: Plural unit description (e.g."meters").
An example invocation is given below for the quantity of length in a meter-kilogram-second
system. The #[macro_use] attribute must be used when including the uom crate to make the
quantity! macro available.
#[macro_use]
extern crate uom;
#[macro_use]
mod length {
quantity! {
/// Length (base unit meter, m).
quantity: Length; "length";
/// Length dimension, m.
dimension: Q<P1 /*length*/, Z0 /*mass*/, Z0 /*time*/>;
units {
@meter: 1.0E0; "m", "meter", "meters";
@foot: 3.048E-1; "ft", "foot", "feet";
}
}
}