1#![no_std]
2#![allow(unused)]
3
4pub(crate) use core::marker::PhantomData;
5pub(crate) use core::ops::*;
6pub(crate) use typenum::*;
7
8#[repr(transparent)]
9#[derive(Clone, Copy, serde::Serialize, serde::Deserialize)]
10#[derive(zerocopy::KnownLayout, zerocopy::Immutable, zerocopy::FromBytes, zerocopy::IntoBytes)]
11#[serde(transparent)]
12pub struct Quantity<T, D: Dimension + ?Sized> {
13 pub value: T,
14 pub dim: PhantomData<D>,
15}
16
17impl <T: core::fmt::Debug, D: Dimension + ?Sized> core::fmt::Debug for Quantity<T, D> {
18 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
19 self.value.fmt(f)?;
20 Ok(())
22 }
23}
24
25impl <T: core::fmt::Display, D: Dimension + ?Sized> core::fmt::Display for Quantity<T, D> {
26 fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
27 self.value.fmt(f)?;
28 Ok(())
30 }
31}
32
33impl <T, D: Dimension + ?Sized> Quantity<T, D> {
34 pub fn new(value: T) -> Self {
35 Quantity { value, dim: PhantomData }
36 }
37}
38
39impl <T, D: Dimension + ?Sized> Deref for Quantity<T, D> {
40 type Target = T;
41
42 fn deref(&self) -> &Self::Target {
43 &self.value
44 }
45}
46
47impl <T, D: Dimension + ?Sized> DerefMut for Quantity<T, D> {
48 fn deref_mut(&mut self) -> &mut Self::Target {
49 &mut self.value
50 }
51}
52
53pub trait WithUnits {
55 type Output<D: Dimension>;
56
57 fn with_units<D: Dimension>(self) -> Self::Output<D>;
59}
60
61impl <T, I: Dimension + ?Sized> WithUnits for Quantity<T, I> {
62 type Output<U: Dimension> = Quantity<T, U>;
63
64 fn with_units<D: Dimension>(self) -> Quantity<T, D> {
65 Quantity::new(self.value)
66 }
67}
68
69impl<T: Add<T, Output = T>, D: Dimension> Add<Quantity<T, D>> for Quantity<T, D> {
70 type Output = Self;
71 fn add(self, rhs: Quantity<T, D>) -> Self::Output {
72 Quantity::new(self.value.add(rhs.value))
73 }
74}
75
76impl<T: AddAssign<T>, D: Dimension> AddAssign<Quantity<T, D>> for Quantity<T, D> {
77 fn add_assign(&mut self, rhs: Quantity<T, D>) {
78 self.value.add_assign(rhs.value);
79 }
80}
81
82impl<T: Sub<T, Output = T>, D: Dimension> Sub<Quantity<T, D>> for Quantity<T, D> {
83 type Output = Self;
84 fn sub(self, rhs: Quantity<T, D>) -> Self::Output {
85 Quantity::new(self.value.sub(rhs.value))
86 }
87}
88
89impl<T: SubAssign<T>, D: Dimension> SubAssign<Quantity<T, D>> for Quantity<T, D> {
90 fn sub_assign(&mut self, rhs: Quantity<T, D>) {
91 self.value.sub_assign(rhs.value);
92 }
93}
94
95impl<T: Mul<T, Output = T>, A: Dimension + Mul<B>, B: Dimension> Mul<Quantity<T, B>> for Quantity<T, A>
96where <A as Mul<B>>::Output: Dimension {
97 type Output = Quantity<T, <A as Mul<B>>::Output>;
98 fn mul(self, rhs: Quantity<T, B>) -> Self::Output {
99 Quantity::new(self.value.mul(rhs.value))
100 }
101}
102
103impl<T: Div<T, Output = T>, A: Dimension + Div<B>, B: Dimension> Div<Quantity<T, B>> for Quantity<T, A>
104where <A as Div<B>>::Output: Dimension {
105 type Output = Quantity<T, <A as Div<B>>::Output>;
106 fn div(self, rhs: Quantity<T, B>) -> Self::Output {
107 Quantity::new(self.value.div(rhs.value))
108 }
109}
110
111pub type Multiply<A, B> = <A as Mul<B>>::Output;
112pub type Divide<N, D> = <N as Div<D>>::Output;
113impl WithUnits for i8 {
114 type Output<D: Dimension> = Quantity<i8, D>;
115
116 fn with_units<D: Dimension>(self) -> Self::Output<D> {
117 Quantity::new(self)
118 }
119}
120impl WithUnits for i16 {
121 type Output<D: Dimension> = Quantity<i16, D>;
122
123 fn with_units<D: Dimension>(self) -> Self::Output<D> {
124 Quantity::new(self)
125 }
126}
127impl WithUnits for i32 {
128 type Output<D: Dimension> = Quantity<i32, D>;
129
130 fn with_units<D: Dimension>(self) -> Self::Output<D> {
131 Quantity::new(self)
132 }
133}
134impl WithUnits for i64 {
135 type Output<D: Dimension> = Quantity<i64, D>;
136
137 fn with_units<D: Dimension>(self) -> Self::Output<D> {
138 Quantity::new(self)
139 }
140}
141impl WithUnits for i128 {
142 type Output<D: Dimension> = Quantity<i128, D>;
143
144 fn with_units<D: Dimension>(self) -> Self::Output<D> {
145 Quantity::new(self)
146 }
147}
148impl WithUnits for isize {
149 type Output<D: Dimension> = Quantity<isize, D>;
150
151 fn with_units<D: Dimension>(self) -> Self::Output<D> {
152 Quantity::new(self)
153 }
154}
155impl WithUnits for u8 {
156 type Output<D: Dimension> = Quantity<u8, D>;
157
158 fn with_units<D: Dimension>(self) -> Self::Output<D> {
159 Quantity::new(self)
160 }
161}
162impl WithUnits for u16 {
163 type Output<D: Dimension> = Quantity<u16, D>;
164
165 fn with_units<D: Dimension>(self) -> Self::Output<D> {
166 Quantity::new(self)
167 }
168}
169impl WithUnits for u32 {
170 type Output<D: Dimension> = Quantity<u32, D>;
171
172 fn with_units<D: Dimension>(self) -> Self::Output<D> {
173 Quantity::new(self)
174 }
175}
176impl WithUnits for u64 {
177 type Output<D: Dimension> = Quantity<u64, D>;
178
179 fn with_units<D: Dimension>(self) -> Self::Output<D> {
180 Quantity::new(self)
181 }
182}
183impl WithUnits for u128 {
184 type Output<D: Dimension> = Quantity<u128, D>;
185
186 fn with_units<D: Dimension>(self) -> Self::Output<D> {
187 Quantity::new(self)
188 }
189}
190impl WithUnits for usize {
191 type Output<D: Dimension> = Quantity<usize, D>;
192
193 fn with_units<D: Dimension>(self) -> Self::Output<D> {
194 Quantity::new(self)
195 }
196}
197impl WithUnits for f32 {
198 type Output<D: Dimension> = Quantity<f32, D>;
199
200 fn with_units<D: Dimension>(self) -> Self::Output<D> {
201 Quantity::new(self)
202 }
203}
204impl WithUnits for f64 {
205 type Output<D: Dimension> = Quantity<f64, D>;
206
207 fn with_units<D: Dimension>(self) -> Self::Output<D> {
208 Quantity::new(self)
209 }
210}
211#[derive(Clone, Copy)]
212pub struct DimensionStruct<Scaling: Integer, Seconds: Integer, Meters: Integer, Grams: Integer, Amperes: Integer, Kelvin: Integer, Moles: Integer, Candelas: Integer, Byte: Integer, Radians: Integer, Steradians: Integer, Celsius: Integer, Minutes: Integer, Hours: Integer, Days: Integer, AstronomicalUnits: Integer, Degrees: Integer, Arcminutes: Integer, Arcseconds: Integer, Ares: Integer, Liters: Integer, Daltons: Integer, Electronvolts: Integer, Nepers: Integer, Bels: Integer, Atmospheres: Integer, Bars: Integer, Parsec: Integer, MillimetersOfMercury: Integer, Gs: Integer> {
213 scaling: PhantomData<Scaling>,
214 seconds: PhantomData<Seconds>,
215 meters: PhantomData<Meters>,
216 grams: PhantomData<Grams>,
217 amperes: PhantomData<Amperes>,
218 kelvin: PhantomData<Kelvin>,
219 moles: PhantomData<Moles>,
220 candelas: PhantomData<Candelas>,
221 byte: PhantomData<Byte>,
222 radians: PhantomData<Radians>,
223 steradians: PhantomData<Steradians>,
224 celsius: PhantomData<Celsius>,
225 minutes: PhantomData<Minutes>,
226 hours: PhantomData<Hours>,
227 days: PhantomData<Days>,
228 astronomical_units: PhantomData<AstronomicalUnits>,
229 degrees: PhantomData<Degrees>,
230 arcminutes: PhantomData<Arcminutes>,
231 arcseconds: PhantomData<Arcseconds>,
232 ares: PhantomData<Ares>,
233 liters: PhantomData<Liters>,
234 daltons: PhantomData<Daltons>,
235 electronvolts: PhantomData<Electronvolts>,
236 nepers: PhantomData<Nepers>,
237 bels: PhantomData<Bels>,
238 atmospheres: PhantomData<Atmospheres>,
239 bars: PhantomData<Bars>,
240 parsec: PhantomData<Parsec>,
241 millimeters_of_mercury: PhantomData<MillimetersOfMercury>,
242 gs: PhantomData<Gs>
243}
244impl <Scaling: Integer, Seconds: Integer, Meters: Integer, Grams: Integer, Amperes: Integer, Kelvin: Integer, Moles: Integer, Candelas: Integer, Byte: Integer, Radians: Integer, Steradians: Integer, Celsius: Integer, Minutes: Integer, Hours: Integer, Days: Integer, AstronomicalUnits: Integer, Degrees: Integer, Arcminutes: Integer, Arcseconds: Integer, Ares: Integer, Liters: Integer, Daltons: Integer, Electronvolts: Integer, Nepers: Integer, Bels: Integer, Atmospheres: Integer, Bars: Integer, Parsec: Integer, MillimetersOfMercury: Integer, Gs: Integer> DimensionStruct<Scaling, Seconds, Meters, Grams, Amperes, Kelvin, Moles, Candelas, Byte, Radians, Steradians, Celsius, Minutes, Hours, Days, AstronomicalUnits, Degrees, Arcminutes, Arcseconds, Ares, Liters, Daltons, Electronvolts, Nepers, Bels, Atmospheres, Bars, Parsec, MillimetersOfMercury, Gs> {
245 pub fn new() -> Self {
246 Self {
247 scaling: PhantomData,
248 seconds: PhantomData,
249 meters: PhantomData,
250 grams: PhantomData,
251 amperes: PhantomData,
252 kelvin: PhantomData,
253 moles: PhantomData,
254 candelas: PhantomData,
255 byte: PhantomData,
256 radians: PhantomData,
257 steradians: PhantomData,
258 celsius: PhantomData,
259 minutes: PhantomData,
260 hours: PhantomData,
261 days: PhantomData,
262 astronomical_units: PhantomData,
263 degrees: PhantomData,
264 arcminutes: PhantomData,
265 arcseconds: PhantomData,
266 ares: PhantomData,
267 liters: PhantomData,
268 daltons: PhantomData,
269 electronvolts: PhantomData,
270 nepers: PhantomData,
271 bels: PhantomData,
272 atmospheres: PhantomData,
273 bars: PhantomData,
274 parsec: PhantomData,
275 millimeters_of_mercury: PhantomData,
276 gs: PhantomData
277 }
278 }
279}
280pub trait Dimension {
281 type Scaling: Integer;
282 type Seconds: Integer;
283 type Meters: Integer;
284 type Grams: Integer;
285 type Amperes: Integer;
286 type Kelvin: Integer;
287 type Moles: Integer;
288 type Candelas: Integer;
289 type Byte: Integer;
290 type Radians: Integer;
291 type Steradians: Integer;
292 type Celsius: Integer;
293 type Minutes: Integer;
294 type Hours: Integer;
295 type Days: Integer;
296 type AstronomicalUnits: Integer;
297 type Degrees: Integer;
298 type Arcminutes: Integer;
299 type Arcseconds: Integer;
300 type Ares: Integer;
301 type Liters: Integer;
302 type Daltons: Integer;
303 type Electronvolts: Integer;
304 type Nepers: Integer;
305 type Bels: Integer;
306 type Atmospheres: Integer;
307 type Bars: Integer;
308 type Parsec: Integer;
309 type MillimetersOfMercury: Integer;
310 type Gs: Integer;
311}
312impl <Scaling: Integer, Seconds: Integer, Meters: Integer, Grams: Integer, Amperes: Integer, Kelvin: Integer, Moles: Integer, Candelas: Integer, Byte: Integer, Radians: Integer, Steradians: Integer, Celsius: Integer, Minutes: Integer, Hours: Integer, Days: Integer, AstronomicalUnits: Integer, Degrees: Integer, Arcminutes: Integer, Arcseconds: Integer, Ares: Integer, Liters: Integer, Daltons: Integer, Electronvolts: Integer, Nepers: Integer, Bels: Integer, Atmospheres: Integer, Bars: Integer, Parsec: Integer, MillimetersOfMercury: Integer, Gs: Integer> Dimension for DimensionStruct<Scaling, Seconds, Meters, Grams, Amperes, Kelvin, Moles, Candelas, Byte, Radians, Steradians, Celsius, Minutes, Hours, Days, AstronomicalUnits, Degrees, Arcminutes, Arcseconds, Ares, Liters, Daltons, Electronvolts, Nepers, Bels, Atmospheres, Bars, Parsec, MillimetersOfMercury, Gs> {
313 type Scaling = Scaling;
314 type Seconds = Seconds;
315 type Meters = Meters;
316 type Grams = Grams;
317 type Amperes = Amperes;
318 type Kelvin = Kelvin;
319 type Moles = Moles;
320 type Candelas = Candelas;
321 type Byte = Byte;
322 type Radians = Radians;
323 type Steradians = Steradians;
324 type Celsius = Celsius;
325 type Minutes = Minutes;
326 type Hours = Hours;
327 type Days = Days;
328 type AstronomicalUnits = AstronomicalUnits;
329 type Degrees = Degrees;
330 type Arcminutes = Arcminutes;
331 type Arcseconds = Arcseconds;
332 type Ares = Ares;
333 type Liters = Liters;
334 type Daltons = Daltons;
335 type Electronvolts = Electronvolts;
336 type Nepers = Nepers;
337 type Bels = Bels;
338 type Atmospheres = Atmospheres;
339 type Bars = Bars;
340 type Parsec = Parsec;
341 type MillimetersOfMercury = MillimetersOfMercury;
342 type Gs = Gs;
343}
344impl <AScaling: Integer + Add<BScaling>, ASeconds: Integer + Add<BSeconds>, AMeters: Integer + Add<BMeters>, AGrams: Integer + Add<BGrams>, AAmperes: Integer + Add<BAmperes>, AKelvin: Integer + Add<BKelvin>, AMoles: Integer + Add<BMoles>, ACandelas: Integer + Add<BCandelas>, AByte: Integer + Add<BByte>, ARadians: Integer + Add<BRadians>, ASteradians: Integer + Add<BSteradians>, ACelsius: Integer + Add<BCelsius>, AMinutes: Integer + Add<BMinutes>, AHours: Integer + Add<BHours>, ADays: Integer + Add<BDays>, AAstronomicalUnits: Integer + Add<BAstronomicalUnits>, ADegrees: Integer + Add<BDegrees>, AArcminutes: Integer + Add<BArcminutes>, AArcseconds: Integer + Add<BArcseconds>, AAres: Integer + Add<BAres>, ALiters: Integer + Add<BLiters>, ADaltons: Integer + Add<BDaltons>, AElectronvolts: Integer + Add<BElectronvolts>, ANepers: Integer + Add<BNepers>, ABels: Integer + Add<BBels>, AAtmospheres: Integer + Add<BAtmospheres>, ABars: Integer + Add<BBars>, AParsec: Integer + Add<BParsec>, AMillimetersOfMercury: Integer + Add<BMillimetersOfMercury>, AGs: Integer + Add<BGs>, BScaling: Integer,BSeconds: Integer,BMeters: Integer,BGrams: Integer,BAmperes: Integer,BKelvin: Integer,BMoles: Integer,BCandelas: Integer,BByte: Integer,BRadians: Integer,BSteradians: Integer,BCelsius: Integer,BMinutes: Integer,BHours: Integer,BDays: Integer,BAstronomicalUnits: Integer,BDegrees: Integer,BArcminutes: Integer,BArcseconds: Integer,BAres: Integer,BLiters: Integer,BDaltons: Integer,BElectronvolts: Integer,BNepers: Integer,BBels: Integer,BAtmospheres: Integer,BBars: Integer,BParsec: Integer,BMillimetersOfMercury: Integer,BGs: Integer> Mul<DimensionStruct<BScaling, BSeconds, BMeters, BGrams, BAmperes, BKelvin, BMoles, BCandelas, BByte, BRadians, BSteradians, BCelsius, BMinutes, BHours, BDays, BAstronomicalUnits, BDegrees, BArcminutes, BArcseconds, BAres, BLiters, BDaltons, BElectronvolts, BNepers, BBels, BAtmospheres, BBars, BParsec, BMillimetersOfMercury, BGs>> for DimensionStruct<AScaling, ASeconds, AMeters, AGrams, AAmperes, AKelvin, AMoles, ACandelas, AByte, ARadians, ASteradians, ACelsius, AMinutes, AHours, ADays, AAstronomicalUnits, ADegrees, AArcminutes, AArcseconds, AAres, ALiters, ADaltons, AElectronvolts, ANepers, ABels, AAtmospheres, ABars, AParsec, AMillimetersOfMercury, AGs>
345where <AScaling as Add<BScaling>>::Output: Integer, <ASeconds as Add<BSeconds>>::Output: Integer, <AMeters as Add<BMeters>>::Output: Integer, <AGrams as Add<BGrams>>::Output: Integer, <AAmperes as Add<BAmperes>>::Output: Integer, <AKelvin as Add<BKelvin>>::Output: Integer, <AMoles as Add<BMoles>>::Output: Integer, <ACandelas as Add<BCandelas>>::Output: Integer, <AByte as Add<BByte>>::Output: Integer, <ARadians as Add<BRadians>>::Output: Integer, <ASteradians as Add<BSteradians>>::Output: Integer, <ACelsius as Add<BCelsius>>::Output: Integer, <AMinutes as Add<BMinutes>>::Output: Integer, <AHours as Add<BHours>>::Output: Integer, <ADays as Add<BDays>>::Output: Integer, <AAstronomicalUnits as Add<BAstronomicalUnits>>::Output: Integer, <ADegrees as Add<BDegrees>>::Output: Integer, <AArcminutes as Add<BArcminutes>>::Output: Integer, <AArcseconds as Add<BArcseconds>>::Output: Integer, <AAres as Add<BAres>>::Output: Integer, <ALiters as Add<BLiters>>::Output: Integer, <ADaltons as Add<BDaltons>>::Output: Integer, <AElectronvolts as Add<BElectronvolts>>::Output: Integer, <ANepers as Add<BNepers>>::Output: Integer, <ABels as Add<BBels>>::Output: Integer, <AAtmospheres as Add<BAtmospheres>>::Output: Integer, <ABars as Add<BBars>>::Output: Integer, <AParsec as Add<BParsec>>::Output: Integer, <AMillimetersOfMercury as Add<BMillimetersOfMercury>>::Output: Integer, <AGs as Add<BGs>>::Output: Integer {
346 type Output = DimensionStruct<<AScaling as Add<BScaling>>::Output,<ASeconds as Add<BSeconds>>::Output,<AMeters as Add<BMeters>>::Output,<AGrams as Add<BGrams>>::Output,<AAmperes as Add<BAmperes>>::Output,<AKelvin as Add<BKelvin>>::Output,<AMoles as Add<BMoles>>::Output,<ACandelas as Add<BCandelas>>::Output,<AByte as Add<BByte>>::Output,<ARadians as Add<BRadians>>::Output,<ASteradians as Add<BSteradians>>::Output,<ACelsius as Add<BCelsius>>::Output,<AMinutes as Add<BMinutes>>::Output,<AHours as Add<BHours>>::Output,<ADays as Add<BDays>>::Output,<AAstronomicalUnits as Add<BAstronomicalUnits>>::Output,<ADegrees as Add<BDegrees>>::Output,<AArcminutes as Add<BArcminutes>>::Output,<AArcseconds as Add<BArcseconds>>::Output,<AAres as Add<BAres>>::Output,<ALiters as Add<BLiters>>::Output,<ADaltons as Add<BDaltons>>::Output,<AElectronvolts as Add<BElectronvolts>>::Output,<ANepers as Add<BNepers>>::Output,<ABels as Add<BBels>>::Output,<AAtmospheres as Add<BAtmospheres>>::Output,<ABars as Add<BBars>>::Output,<AParsec as Add<BParsec>>::Output,<AMillimetersOfMercury as Add<BMillimetersOfMercury>>::Output,<AGs as Add<BGs>>::Output>;
347
348 fn mul(self, rhs: DimensionStruct<BScaling, BSeconds, BMeters, BGrams, BAmperes, BKelvin, BMoles, BCandelas, BByte, BRadians, BSteradians, BCelsius, BMinutes, BHours, BDays, BAstronomicalUnits, BDegrees, BArcminutes, BArcseconds, BAres, BLiters, BDaltons, BElectronvolts, BNepers, BBels, BAtmospheres, BBars, BParsec, BMillimetersOfMercury, BGs>) -> Self::Output {
349 DimensionStruct::new()
350 }
351}
352impl <AScaling: Integer + Sub<BScaling>, ASeconds: Integer + Sub<BSeconds>, AMeters: Integer + Sub<BMeters>, AGrams: Integer + Sub<BGrams>, AAmperes: Integer + Sub<BAmperes>, AKelvin: Integer + Sub<BKelvin>, AMoles: Integer + Sub<BMoles>, ACandelas: Integer + Sub<BCandelas>, AByte: Integer + Sub<BByte>, ARadians: Integer + Sub<BRadians>, ASteradians: Integer + Sub<BSteradians>, ACelsius: Integer + Sub<BCelsius>, AMinutes: Integer + Sub<BMinutes>, AHours: Integer + Sub<BHours>, ADays: Integer + Sub<BDays>, AAstronomicalUnits: Integer + Sub<BAstronomicalUnits>, ADegrees: Integer + Sub<BDegrees>, AArcminutes: Integer + Sub<BArcminutes>, AArcseconds: Integer + Sub<BArcseconds>, AAres: Integer + Sub<BAres>, ALiters: Integer + Sub<BLiters>, ADaltons: Integer + Sub<BDaltons>, AElectronvolts: Integer + Sub<BElectronvolts>, ANepers: Integer + Sub<BNepers>, ABels: Integer + Sub<BBels>, AAtmospheres: Integer + Sub<BAtmospheres>, ABars: Integer + Sub<BBars>, AParsec: Integer + Sub<BParsec>, AMillimetersOfMercury: Integer + Sub<BMillimetersOfMercury>, AGs: Integer + Sub<BGs>, BScaling: Integer,BSeconds: Integer,BMeters: Integer,BGrams: Integer,BAmperes: Integer,BKelvin: Integer,BMoles: Integer,BCandelas: Integer,BByte: Integer,BRadians: Integer,BSteradians: Integer,BCelsius: Integer,BMinutes: Integer,BHours: Integer,BDays: Integer,BAstronomicalUnits: Integer,BDegrees: Integer,BArcminutes: Integer,BArcseconds: Integer,BAres: Integer,BLiters: Integer,BDaltons: Integer,BElectronvolts: Integer,BNepers: Integer,BBels: Integer,BAtmospheres: Integer,BBars: Integer,BParsec: Integer,BMillimetersOfMercury: Integer,BGs: Integer> Div<DimensionStruct<BScaling, BSeconds, BMeters, BGrams, BAmperes, BKelvin, BMoles, BCandelas, BByte, BRadians, BSteradians, BCelsius, BMinutes, BHours, BDays, BAstronomicalUnits, BDegrees, BArcminutes, BArcseconds, BAres, BLiters, BDaltons, BElectronvolts, BNepers, BBels, BAtmospheres, BBars, BParsec, BMillimetersOfMercury, BGs>> for DimensionStruct<AScaling, ASeconds, AMeters, AGrams, AAmperes, AKelvin, AMoles, ACandelas, AByte, ARadians, ASteradians, ACelsius, AMinutes, AHours, ADays, AAstronomicalUnits, ADegrees, AArcminutes, AArcseconds, AAres, ALiters, ADaltons, AElectronvolts, ANepers, ABels, AAtmospheres, ABars, AParsec, AMillimetersOfMercury, AGs>
353where <AScaling as Sub<BScaling>>::Output: Integer, <ASeconds as Sub<BSeconds>>::Output: Integer, <AMeters as Sub<BMeters>>::Output: Integer, <AGrams as Sub<BGrams>>::Output: Integer, <AAmperes as Sub<BAmperes>>::Output: Integer, <AKelvin as Sub<BKelvin>>::Output: Integer, <AMoles as Sub<BMoles>>::Output: Integer, <ACandelas as Sub<BCandelas>>::Output: Integer, <AByte as Sub<BByte>>::Output: Integer, <ARadians as Sub<BRadians>>::Output: Integer, <ASteradians as Sub<BSteradians>>::Output: Integer, <ACelsius as Sub<BCelsius>>::Output: Integer, <AMinutes as Sub<BMinutes>>::Output: Integer, <AHours as Sub<BHours>>::Output: Integer, <ADays as Sub<BDays>>::Output: Integer, <AAstronomicalUnits as Sub<BAstronomicalUnits>>::Output: Integer, <ADegrees as Sub<BDegrees>>::Output: Integer, <AArcminutes as Sub<BArcminutes>>::Output: Integer, <AArcseconds as Sub<BArcseconds>>::Output: Integer, <AAres as Sub<BAres>>::Output: Integer, <ALiters as Sub<BLiters>>::Output: Integer, <ADaltons as Sub<BDaltons>>::Output: Integer, <AElectronvolts as Sub<BElectronvolts>>::Output: Integer, <ANepers as Sub<BNepers>>::Output: Integer, <ABels as Sub<BBels>>::Output: Integer, <AAtmospheres as Sub<BAtmospheres>>::Output: Integer, <ABars as Sub<BBars>>::Output: Integer, <AParsec as Sub<BParsec>>::Output: Integer, <AMillimetersOfMercury as Sub<BMillimetersOfMercury>>::Output: Integer, <AGs as Sub<BGs>>::Output: Integer {
354 type Output = DimensionStruct<<AScaling as Sub<BScaling>>::Output,<ASeconds as Sub<BSeconds>>::Output,<AMeters as Sub<BMeters>>::Output,<AGrams as Sub<BGrams>>::Output,<AAmperes as Sub<BAmperes>>::Output,<AKelvin as Sub<BKelvin>>::Output,<AMoles as Sub<BMoles>>::Output,<ACandelas as Sub<BCandelas>>::Output,<AByte as Sub<BByte>>::Output,<ARadians as Sub<BRadians>>::Output,<ASteradians as Sub<BSteradians>>::Output,<ACelsius as Sub<BCelsius>>::Output,<AMinutes as Sub<BMinutes>>::Output,<AHours as Sub<BHours>>::Output,<ADays as Sub<BDays>>::Output,<AAstronomicalUnits as Sub<BAstronomicalUnits>>::Output,<ADegrees as Sub<BDegrees>>::Output,<AArcminutes as Sub<BArcminutes>>::Output,<AArcseconds as Sub<BArcseconds>>::Output,<AAres as Sub<BAres>>::Output,<ALiters as Sub<BLiters>>::Output,<ADaltons as Sub<BDaltons>>::Output,<AElectronvolts as Sub<BElectronvolts>>::Output,<ANepers as Sub<BNepers>>::Output,<ABels as Sub<BBels>>::Output,<AAtmospheres as Sub<BAtmospheres>>::Output,<ABars as Sub<BBars>>::Output,<AParsec as Sub<BParsec>>::Output,<AMillimetersOfMercury as Sub<BMillimetersOfMercury>>::Output,<AGs as Sub<BGs>>::Output>;
355
356 fn div(self, rhs: DimensionStruct<BScaling, BSeconds, BMeters, BGrams, BAmperes, BKelvin, BMoles, BCandelas, BByte, BRadians, BSteradians, BCelsius, BMinutes, BHours, BDays, BAstronomicalUnits, BDegrees, BArcminutes, BArcseconds, BAres, BLiters, BDaltons, BElectronvolts, BNepers, BBels, BAtmospheres, BBars, BParsec, BMillimetersOfMercury, BGs>) -> Self::Output {
357 DimensionStruct::new()
358 }
359}
360pub mod seconds;
361pub use seconds::*;
362pub mod meters;
363pub use meters::*;
364pub mod grams;
365pub use grams::*;
366pub mod amperes;
367pub use amperes::*;
368pub mod kelvin;
369pub use kelvin::*;
370pub mod moles;
371pub use moles::*;
372pub mod candelas;
373pub use candelas::*;
374pub mod byte;
375pub use byte::*;
376pub mod radians;
377pub use radians::*;
378pub mod steradians;
379pub use steradians::*;
380pub mod celsius;
381pub use celsius::*;
382pub mod minutes;
383pub use minutes::*;
384pub mod hours;
385pub use hours::*;
386pub mod days;
387pub use days::*;
388pub mod astronomical_units;
389pub use astronomical_units::*;
390pub mod degrees;
391pub use degrees::*;
392pub mod arcminutes;
393pub use arcminutes::*;
394pub mod arcseconds;
395pub use arcseconds::*;
396pub mod ares;
397pub use ares::*;
398pub mod liters;
399pub use liters::*;
400pub mod daltons;
401pub use daltons::*;
402pub mod electronvolts;
403pub use electronvolts::*;
404pub mod nepers;
405pub use nepers::*;
406pub mod bels;
407pub use bels::*;
408pub mod atmospheres;
409pub use atmospheres::*;
410pub mod bars;
411pub use bars::*;
412pub mod parsec;
413pub use parsec::*;
414pub mod millimeters_of_mercury;
415pub use millimeters_of_mercury::*;
416pub mod gs;
417pub use gs::*;
418pub mod amps;
419pub use amps::*;
420pub mod micron;
421pub use micron::*;
422pub mod fermi;
423pub use fermi::*;
424pub mod metric_ton;
425pub use metric_ton::*;
426pub mod hertz;
427pub use hertz::*;
428pub mod newtons;
429pub use newtons::*;
430pub mod pascals;
431pub use pascals::*;
432pub mod joules;
433pub use joules::*;
434pub mod watts;
435pub use watts::*;
436pub mod coulombs;
437pub use coulombs::*;
438pub mod volts;
439pub use volts::*;
440pub mod farads;
441pub use farads::*;
442pub mod ohms;
443pub use ohms::*;
444pub mod siemens;
445pub use siemens::*;
446pub mod webers;
447pub use webers::*;
448pub mod teslas;
449pub use teslas::*;
450pub mod henries;
451pub use henries::*;
452pub mod lumens;
453pub use lumens::*;
454pub mod lux;
455pub use lux::*;
456pub mod becquerels;
457pub use becquerels::*;
458pub mod grays;
459pub use grays::*;
460pub mod sieverts;
461pub use sieverts::*;
462pub mod katals;
463pub use katals::*;