Macro uom::quantity
[−]
[src]
macro_rules! quantity { ( $(#[$quantity_attr:meta])* quantity: $quantity:ident; $description:expr; $(#[$dim_attr:meta])* dimension: $system:ident<$($dimension:ident),+>; units { $($(#[$unit_attr:meta])* @$unit:ident: $conversion:expr; $abbreviation:expr, $singular:expr, $plural:expr;)+ } ) => { ... }; (@unit $(#[$unit_attr:meta])+ @$unit:ident) => { ... }; (@unit @$unit:ident) => { ... }; }
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 atypenum
type-level integer (e.g.N1
,Z0
,P1
,P2
, ...).$unit
: Unit name (e.g.meter
,foot
).$conversion
: Conversion from the unit to the base unit of the quantity (e.g.3.048E-1
to convertfoot
tometer
).$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<sup>1</sup>). quantity: Length; "length"; /// Length dimension, m<sup>1</sup>. dimension: Q<P1 /*length*/, Z0 /*mass*/, Z0 /*time*/>; units { @meter: 1.0E0; "m", "meter", "meters"; @foot: 3.048E-1; "ft", "foot", "feet"; } } }