[−][src]Crate yaum
This crate provides type-safe basic scientific units and constants for no_std
programs.
Example
use yaum::time::*; use yaum::length::*; use yaum::velocity::*; // Simple arithmetic assert_eq!(1.0 * kph, 1.0 * km / h); assert_eq!(1.0 * km / min, 60.0 * km / h); // Read value in a given unit assert_eq!(60.0, (1.0 * min).s()); assert_eq!(1_000.0, (1.0 * km).m());
Currently supported units:
time
: Timefrequency
: Frequencylength
: Lengthvelocity
: Velocity, Accelerationdigital
: LSB (least significant bits)
Define custom units and conversions using the impl_unit!
, convert_div!
and convert_unit!
macros.
#[macro_use] extern crate yaum; use yaum::*; use yaum::time::*; yaum::impl_unit!(ByteSize, { B: 1.0, kB: 1024.0, MB: 1024.0 * 1024.0 }); yaum::impl_unit!(BitSize, { b: 1.0, kb: 1024.0, Mb: 1024.0 * 1024.0 }); // define conversion between the two units (1 byte = 8 bits): yaum::convert_unit!(ByteSize, BitSize, 8.0); yaum::impl_unit!(BitSpeed, { bps: 1.0, kbps: 1024.0, Mbps: 1024.0 * 1024.0 }); // define relationship between units (BitSpeed = BitSize/Time) yaum::convert_div!(BitSize, Time, BitSpeed); fn main() { assert_eq!(8.0 * b, (1.0 * B).into()); assert_eq!(1.0 * kbps, 1.0 * kb/s); }
Precision
By default, units are implemented on top of f32
. Enable the double_precision
feature for f64
.
Modules
conversions | |
frequency | |
length | |
time | |
velocity |
Macros
convert_div | Specify the result of division of two types. |
convert_unit | Specify the conversion factor between two types. |
impl_unit | Define a unit. Specify units, constants in brackets. |
Type Definitions
Base | Base type. |