uom
Units of measurement is a crate that does automatic type-safe zero-cost dimensional analysis. You can create your own systems or use the pre-built International System of Units (SI) which is based on the International System of Quantities (ISQ) and includes numerous quantities (length, mass, time, ...) with conversion factors for even more numerous measurement units (meter, kilometer, foot, mile, ...). No more crashing your climate orbiter!
Usage
Add this to your Cargo.toml:
[]
= "0.11.0"
and this to your crate root:
extern crate uom;
The simple example below shows how to use quantities and units as well as how uom stops invalid
operations.
extern crate uom;
use *;
use kilometer;
use second;
See the examples directory for more advanced usage:
- si.rs -- Example showing how to use the pre-built SI system.
- base.rs -- Example showing how to create a set of
Quantitytype aliases for a different set of base units. - mks.rs -- Example showing how to create a custom system of quantities.
Design
Rather than working with measurement units (meter,
kilometer, foot, mile, ...) uom works with quantities
(length, mass, time, ...). This simplifies usage because units are only involved at interface
boundaries: the rest of your code only needs to be concerned about the quantities involved. This
also makes operations on quantities (+, -, *, /, ...) have zero runtime cost1 over
using the raw storage type (e.g. f32).
uom normalizes values to the base unit for the quantity.
Alternative base units can be used by executing the macro defined for the system of quantities
(ISQ! for the SI). uom supports both f32 and f64 as the underlying storage type.
- Once codegen bug #38269 is resolved.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.