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
pub mod length {
    use metron_core::def_unit;
    def_unit! {
        pub Thou {
            from(Inch =* 1000.),
            from(Feet =* 12000.),
            sym("th"),
        }
    }
    def_unit! {
        pub Inch {
            from(Thou =/ 1000.),
            sym("in"),
        }
    }
    def_unit! {
        pub Feet {
            from(Thou =/ 12000.),
            from(Inch =/ 12.),
            sym("ft"),
        }
    }
    def_unit! {
        pub Yard {
            from(Feet =/ 3.),
            sym("ft"),
        }
    }
    def_unit! {
        pub Chain {
            from(Yard =/ 22.),
            sym("ch"),
        }
    }
    def_unit! {
        pub Furlong {
            from(Chain =/ 10.),
            sym("fur"),
        }
    }
    def_unit! {
        pub Mile {
            from(Furlong =/ 8.),
            sym("mi"),
        }
    }
    def_unit! {
        pub League {
            from(Mile =/ 3.),
            sym("lea"),
        }
    }
    #[cfg(test)]
    mod test {
        use metron_core::Measure;
        #[test]
        fn thou2feet() {
            type Thou = Measure<f32, super::Thou>;
            type Feet = Measure<f32, super::Feet>;
            assert_eq!(Feet::new(1.), Feet::from_unit(Thou::new(12000.)))
        }
    }
}