| Crates.io | danwi |
| lib.rs | danwi |
| version | 0.2.3 |
| created_at | 2023-10-01 21:59:21.688577+00 |
| updated_at | 2025-09-27 07:28:02.199356+00 |
| description | SI units library |
| homepage | |
| repository | https://github.com/dpjungmin/danwi |
| max_upload_size | |
| id | 989470 |
| size | 63,495 |
A dimensional analysis library for Rust with SI units, compile-time type
checking, and no_std support.
use danwi::f64::{QuantityExt, constants::*, types::*};
// create a quantity by multiplying units
let v = (5.0_f64 * mA) * (2.0_f64 * kOhm);
assert_eq!(v, 10.0 * V);
assert_eq!(v, 10.0.V()); // create a quantity using the extension trait
assert_eq!(v.value(), 10.0);
assert_eq!(v, Volt::from(10.0)); // create a quantity using type alias
// convert between prefixes
let mv = v.to(mV);
assert_eq!(mv.value(), 10000.0);
assert_eq!(mv, 10000.0.mV());
assert_eq!(mv, 10.0.V());
assert_eq!(mv, 0.01.kV());
// divide units
let i = v / 2.0.kOhm();
assert_eq!(i, 5.0.mA());
let period = 1.0.s();
let freq = 1.0 / period;
assert_eq!(freq, 1.0.Hz());
assert_eq!(freq, 1.0.hertz());
// add units
let t = 1.0.s() + 1e3.ms() + 1e6.us() + 1e9.ns();
assert_eq!(t, 4.0.second());
assert_eq!(t / 2.0.s(), 2.0);
assert_eq!(t / 2e3.ms(), 2.0);
// mixed units
let a = Meter::from(100.0);
let b = 50.0 * cm;
let c = 0.001 * km;
let len = a + b + c;
println!("Length: {} m", len.value()); // Length: 101.5 m
println!("Length: {} m", len); // Length: 101.5 m
println!("Length: {} cm", len.to(cm)); // Length: 10150 cm
println!("Length: {} km", len.to(km)); // Length: 0.1015 km