uy
Compile-time unit safety for Rust. Catches unit errors at compile time with zero runtime cost.
See docs.rs/uy for the full API.
use ;
let distance: meters = new;
let time: seconds = new;
let speed: meters_per_second = distance / time;
// This won't compile - can't add meters to seconds:
// let wrong = distance + time;
Installation
[]
= "0.2"
Usage
Basic quantities
use ;
let mass: kilograms = new;
let force: newtons = new;
Unit algebra
Units combine through multiplication and division. All derived and compound units are just type aliases to combinations of Mul, Div, and base units:
use ;
// These are equivalent:
let v1: meters_per_second = new;
let v2: = new;
// Unit algebra works automatically:
let length: meters = new;
let width: meters = new;
let area: square_meters = length * width; // m * m = m²
Prefix conversions
Scale is encoded in the type via TenTo<N>. Prefixes like milli and kilo are type aliases:
use ;
// si::milli<U> is just Mul<U, TenTo<-3>>
let meters: meters = new;
let millimeters: = meters.convert;
assert_eq!;
Accessing values
Quantity implements Deref, so use * to get the inner value:
use ;
let temp: kelvin = new;
println!;
Module structure
si- Quantity type aliases (si::meters<T>,si::newtons<T>, etc.)si::units- Raw unit types for use withQuantity<T, U>and prefixessi::prefixes- Scale prefixes (milli,kilo, etc.)
License
MIT