anything/units/
length.rs

1//! Special distance units.
2
3use crate::unit::{Conversion, ConversionFraction, Derived, DerivedVtable, Unit};
4
5/// Astronomical unit (`au`) or `149597870700m`.
6pub static AU: Derived = Derived {
7    id: crate::generated::ids::AU,
8    vtable: &DerivedVtable {
9        powers: |powers, p| {
10            powers.insert(Unit::Meter, p);
11        },
12        format: |f, _| write!(f, "au"),
13        conversion: Some(Conversion::Factor(ConversionFraction {
14            numer: 149597870700,
15            denom: 1,
16        })),
17    },
18};
19
20/// Fathom (`ftm`) or `1.852m`.
21pub static FATHOM: Derived = Derived {
22    id: crate::generated::ids::FATHOM,
23    vtable: &DerivedVtable {
24        powers: |powers, p| {
25            powers.insert(Unit::Meter, p);
26        },
27        format: |f, _| write!(f, "ftm"),
28        conversion: Some(Conversion::Factor(ConversionFraction {
29            numer: 1852,
30            denom: 1000,
31        })),
32    },
33};
34
35/// Cable (`ftm`) or `1.852m`.
36pub static CABLE: Derived = Derived {
37    id: crate::generated::ids::CABLE,
38    vtable: &DerivedVtable {
39        powers: |powers, p| {
40            powers.insert(Unit::Meter, p);
41        },
42        format: |f, pluralize| {
43            if pluralize {
44                write!(f, "cables")
45            } else {
46                write!(f, "cable")
47            }
48        },
49        conversion: Some(Conversion::Factor(ConversionFraction {
50            numer: 1852,
51            denom: 10,
52        })),
53    },
54};
55
56/// Nautical mile (`NM`) or `1852m`.
57pub static NAUTICAL_MILE: Derived = Derived {
58    id: crate::generated::ids::NAUTICAL_MILE,
59    vtable: &DerivedVtable {
60        powers: |powers, p| {
61            powers.insert(Unit::Meter, p);
62        },
63        format: |f, _| write!(f, "NM"),
64        conversion: Some(Conversion::Factor(ConversionFraction {
65            numer: 1852,
66            denom: 1,
67        })),
68    },
69};
70
71/// Link (`link`) or `0.201168m`.
72pub static LINK: Derived = Derived {
73    id: crate::generated::ids::LINK,
74    vtable: &DerivedVtable {
75        powers: |powers, p| {
76            powers.insert(Unit::Meter, p);
77        },
78        format: |f, pluralize| {
79            if pluralize {
80                write!(f, "links")
81            } else {
82                write!(f, "link")
83            }
84        },
85        conversion: Some(Conversion::Factor(ConversionFraction {
86            numer: 201168,
87            denom: 1000000,
88        })),
89    },
90};
91
92/// Rod (`rod`) or `5.0292m`.
93pub static ROD: Derived = Derived {
94    id: crate::generated::ids::ROD,
95    vtable: &DerivedVtable {
96        powers: |powers, p| {
97            powers.insert(Unit::Meter, p);
98        },
99        format: |f, _| write!(f, "rd"),
100        conversion: Some(Conversion::Factor(ConversionFraction {
101            numer: 50292,
102            denom: 10000,
103        })),
104    },
105};
106
107/// Thou `thou` (`1⁄12000ft`).
108pub static THOU: Derived = Derived {
109    id: crate::generated::ids::THOU,
110    vtable: &DerivedVtable {
111        powers: |powers, p| {
112            powers.insert(Unit::Meter, p);
113        },
114        format: |f, _| write!(f, "th"),
115        conversion: Some(Conversion::Factor(ConversionFraction {
116            numer: 254,
117            denom: 10000000,
118        })),
119    },
120};
121
122/// Barleycorns `Bc` (`1⁄3 in`).
123pub static BARLEYCORN: Derived = Derived {
124    id: crate::generated::ids::BARLEYCORN,
125    vtable: &DerivedVtable {
126        powers: |powers, p| {
127            powers.insert(Unit::Meter, p);
128        },
129        format: |f, _| write!(f, "Bc"),
130        conversion: Some(Conversion::Factor(ConversionFraction {
131            numer: 254,
132            denom: 30000,
133        })),
134    },
135};
136
137/// Inches `in` (`3Bc`) or (`0.0254m`).
138pub static INCH: Derived = Derived {
139    id: crate::generated::ids::INCH,
140    vtable: &DerivedVtable {
141        powers: |powers, p| {
142            powers.insert(Unit::Meter, p);
143        },
144        format: |f, _| write!(f, "in"),
145        conversion: Some(Conversion::Factor(ConversionFraction {
146            numer: 254,
147            denom: 10000,
148        })),
149    },
150};
151
152/// Hand `hand` (`4in`) or (`0.1016m`).
153pub static HAND: Derived = Derived {
154    id: crate::generated::ids::HAND,
155    vtable: &DerivedVtable {
156        powers: |powers, p| {
157            powers.insert(Unit::Meter, p);
158        },
159        format: |f, _| write!(f, "hand"),
160        conversion: Some(Conversion::Factor(ConversionFraction {
161            numer: 1016,
162            denom: 10000,
163        })),
164    },
165};
166
167/// Foot `ft` (`12in`) or (`0.3048m`).
168pub static FOOT: Derived = Derived {
169    id: crate::generated::ids::FOOT,
170    vtable: &DerivedVtable {
171        powers: |powers, p| {
172            powers.insert(Unit::Meter, p);
173        },
174        format: |f, _| write!(f, "ft"),
175        conversion: Some(Conversion::Factor(ConversionFraction {
176            numer: 3048,
177            denom: 10000,
178        })),
179    },
180};
181
182/// Yards `yd` (`3ft`) or (`0.9144m`).
183pub static YARD: Derived = Derived {
184    id: crate::generated::ids::YARD,
185    vtable: &DerivedVtable {
186        powers: |powers, p| {
187            powers.insert(Unit::Meter, p);
188        },
189        format: |f, _| write!(f, "yd"),
190        conversion: Some(Conversion::Factor(ConversionFraction {
191            numer: 9144,
192            denom: 10000,
193        })),
194    },
195};
196
197/// Chain `ch` (`22yd`) or (`20.1168m`).
198pub static CHAIN: Derived = Derived {
199    id: crate::generated::ids::CHAIN,
200    vtable: &DerivedVtable {
201        powers: |powers, p| {
202            powers.insert(Unit::Meter, p);
203        },
204        format: |f, _| write!(f, "ch"),
205        conversion: Some(Conversion::Factor(ConversionFraction {
206            numer: 201168,
207            denom: 10000,
208        })),
209    },
210};
211
212/// Furlong `fur` (`10ch`) or (`201.168m`).
213pub static FURLONG: Derived = Derived {
214    id: crate::generated::ids::FURLONG,
215    vtable: &DerivedVtable {
216        powers: |powers, p| {
217            powers.insert(Unit::Meter, p);
218        },
219        format: |f, _| write!(f, "fur"),
220        conversion: Some(Conversion::Factor(ConversionFraction {
221            numer: 201168,
222            denom: 1000,
223        })),
224    },
225};
226
227/// Mile `mi` (`8fur`) or (`1609.344m`).
228pub static MILE: Derived = Derived {
229    id: crate::generated::ids::MILE,
230    vtable: &DerivedVtable {
231        powers: |powers, p| {
232            powers.insert(Unit::Meter, p);
233        },
234        format: |f, _| write!(f, "mi"),
235        conversion: Some(Conversion::Factor(ConversionFraction {
236            numer: 1609344,
237            denom: 1000,
238        })),
239    },
240};
241
242/// League `lea` (`3mi`) or (`4828.032m`).
243pub static LEAGUE: Derived = Derived {
244    id: crate::generated::ids::LEAGUE,
245    vtable: &DerivedVtable {
246        powers: |powers, p| {
247            powers.insert(Unit::Meter, p);
248        },
249        format: |f, _| write!(f, "lea"),
250        conversion: Some(Conversion::Factor(ConversionFraction {
251            numer: 4828032,
252            denom: 1000,
253        })),
254    },
255};