uunit/
lib.rs

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        // TODO: write unit string (e.g. so this method writes "32.123 Pascals")
21        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        // TODO: write unit string (e.g. so this method writes "32.123 Pascals")
29        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
53/// Re-interprets the unit WITHOUT conversion.
54pub trait WithUnits {
55    type Output<D: Dimension>;
56
57    /// Re-interprets the units WITHOUT conversion.
58    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::*;