forked from iliekturtles/uom
-
Notifications
You must be signed in to change notification settings - Fork 0
/
mks.rs
88 lines (77 loc) · 1.7 KB
/
mks.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
//! Example showing how to create a custom system of quantities.
#[macro_use]
extern crate uom;
use crate::length::{foot, meter};
use uom::fmt::DisplayStyle::Abbreviation;
fn main() {
let l1 = f32::Length::new::<meter>(100.0);
println!(
"{} = {}",
l1.into_format_args(meter, Abbreviation),
l1.into_format_args(foot, Abbreviation)
);
}
#[macro_use]
mod length {
quantity! {
/// Length (base unit meter, m).
quantity: Length; "length";
/// Length dimension, m.
dimension: Q<
P1, // length
Z0, // mass
Z0>; // time
units {
@meter: 1.0E0; "m", "meter", "meters";
@foot: 3.048E-1; "ft", "foot", "feet";
}
}
}
#[macro_use]
mod mass {
quantity! {
/// Mass (base unit kilogram, kg).
quantity: Mass; "mass";
/// Mass dimension, kg.
dimension: Q<
Z0, // length
P1, // mass
Z0>; // time
units {
@kilogram: 1.0; "kg", "kilogram", "kilograms";
}
}
}
#[macro_use]
mod time {
quantity! {
/// Time (base unit second, s).
quantity: Time; "time";
/// Time dimension, s.
dimension: Q<
Z0, // length
Z0, // mass
P1>; // time
units {
@second: 1.0; "s", "second", "seconds";
}
}
}
system! {
quantities: Q {
length: meter, L;
mass: kilogram, M;
time: second, T;
}
units: U {
mod length::Length,
mod mass::Mass,
mod time::Time,
}
}
mod f32 {
mod mks {
pub use super::super::*;
}
Q!(self::mks, f32);
}