embassy_ha/
unit.rs

1#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
2pub enum TemperatureUnit {
3    #[default]
4    Celcius,
5    Kelvin,
6    Fahrenheit,
7    Other(&'static str),
8}
9
10impl TemperatureUnit {
11    pub fn as_str(&self) -> &'static str {
12        match self {
13            TemperatureUnit::Celcius => crate::constants::HA_UNIT_TEMPERATURE_CELSIUS,
14            TemperatureUnit::Kelvin => crate::constants::HA_UNIT_TEMPERATURE_KELVIN,
15            TemperatureUnit::Fahrenheit => crate::constants::HA_UNIT_TEMPERATURE_FAHRENHEIT,
16            TemperatureUnit::Other(other) => other,
17        }
18    }
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq)]
22pub enum HumidityUnit {
23    Percentage,
24    Other(&'static str),
25}
26
27impl HumidityUnit {
28    pub fn as_str(&self) -> &'static str {
29        match self {
30            HumidityUnit::Percentage => crate::constants::HA_UNIT_PERCENTAGE,
31            HumidityUnit::Other(other) => other,
32        }
33    }
34}
35
36#[derive(Debug, Clone, Copy, PartialEq, Eq)]
37pub enum BatteryUnit {
38    Percentage,
39}
40
41impl BatteryUnit {
42    pub fn as_str(&self) -> &'static str {
43        match self {
44            BatteryUnit::Percentage => crate::constants::HA_UNIT_PERCENTAGE,
45        }
46    }
47}
48
49#[derive(Debug, Clone, Copy, PartialEq, Eq)]
50pub enum LightUnit {
51    Lux,
52}
53
54impl LightUnit {
55    pub fn as_str(&self) -> &'static str {
56        match self {
57            LightUnit::Lux => crate::constants::HA_UNIT_LIGHT_LUX,
58        }
59    }
60}
61
62#[derive(Debug, Clone, Copy, PartialEq, Eq)]
63pub enum PressureUnit {
64    HectoPascal,
65}
66
67impl PressureUnit {
68    pub fn as_str(&self) -> &'static str {
69        match self {
70            PressureUnit::HectoPascal => crate::constants::HA_UNIT_PRESSURE_HPA,
71        }
72    }
73}
74
75#[derive(Debug, Clone, Copy, PartialEq, Eq)]
76pub enum SignalStrengthUnit {
77    Dbm,
78}
79
80impl SignalStrengthUnit {
81    pub fn as_str(&self) -> &'static str {
82        match self {
83            SignalStrengthUnit::Dbm => crate::constants::HA_UNIT_SIGNAL_STRENGTH_DBM,
84        }
85    }
86}
87
88#[derive(Debug, Clone, Copy, PartialEq, Eq)]
89pub enum EnergyUnit {
90    KiloWattHour,
91}
92
93impl EnergyUnit {
94    pub fn as_str(&self) -> &'static str {
95        match self {
96            EnergyUnit::KiloWattHour => crate::constants::HA_UNIT_ENERGY_KWH,
97        }
98    }
99}
100
101#[derive(Debug, Clone, Copy, PartialEq, Eq)]
102pub enum TimeUnit {
103    Milliseconds,
104    Seconds,
105    Minutes,
106    Hours,
107    Days,
108}
109
110impl TimeUnit {
111    pub fn as_str(&self) -> &'static str {
112        match self {
113            TimeUnit::Milliseconds => crate::constants::HA_UNIT_TIME_MILLISECONDS,
114            TimeUnit::Seconds => crate::constants::HA_UNIT_TIME_SECONDS,
115            TimeUnit::Minutes => crate::constants::HA_UNIT_TIME_MINUTES,
116            TimeUnit::Hours => crate::constants::HA_UNIT_TIME_HOURS,
117            TimeUnit::Days => crate::constants::HA_UNIT_TIME_DAYS,
118        }
119    }
120}
121
122#[derive(Debug, Clone, Copy, PartialEq, Eq)]
123pub enum PowerUnit {
124    Watt,
125    KiloWatt,
126}
127
128impl PowerUnit {
129    pub fn as_str(&self) -> &'static str {
130        match self {
131            PowerUnit::Watt => crate::constants::HA_UNIT_POWER_WATT,
132            PowerUnit::KiloWatt => crate::constants::HA_UNIT_POWER_KILOWATT,
133        }
134    }
135}
136
137#[derive(Debug, Clone, Copy, PartialEq, Eq)]
138pub enum VoltageUnit {
139    Volt,
140}
141
142impl VoltageUnit {
143    pub fn as_str(&self) -> &'static str {
144        match self {
145            VoltageUnit::Volt => crate::constants::HA_UNIT_VOLTAGE_VOLT,
146        }
147    }
148}
149
150#[derive(Debug, Clone, Copy, PartialEq, Eq)]
151pub enum CurrentUnit {
152    Ampere,
153}
154
155impl CurrentUnit {
156    pub fn as_str(&self) -> &'static str {
157        match self {
158            CurrentUnit::Ampere => crate::constants::HA_UNIT_CURRENT_AMPERE,
159        }
160    }
161}
162
163#[derive(Debug, Clone, Copy, PartialEq, Eq)]
164pub enum DistanceUnit {
165    Millimeter,
166    Centimeter,
167    Meter,
168    Kilometer,
169}
170
171impl DistanceUnit {
172    pub fn as_str(&self) -> &'static str {
173        match self {
174            DistanceUnit::Millimeter => crate::constants::HA_UNIT_DISTANCE_MILLIMETER,
175            DistanceUnit::Centimeter => crate::constants::HA_UNIT_DISTANCE_CENTIMETER,
176            DistanceUnit::Meter => crate::constants::HA_UNIT_DISTANCE_METER,
177            DistanceUnit::Kilometer => crate::constants::HA_UNIT_DISTANCE_KILOMETER,
178        }
179    }
180}
181
182#[derive(Debug, Clone, Copy, PartialEq, Eq)]
183pub enum CurrencyUnit {
184    USD,
185    EUR,
186    GBP,
187    JPY,
188    CNY,
189    CAD,
190    AUD,
191    CHF,
192    INR,
193    BRL,
194    Dollar,
195    Euro,
196    Pound,
197    Yen,
198    Cent,
199    Other(&'static str),
200}
201
202impl CurrencyUnit {
203    pub fn as_str(&self) -> &'static str {
204        match self {
205            CurrencyUnit::USD => crate::constants::HA_UNIT_CURRENCY_USD,
206            CurrencyUnit::EUR => crate::constants::HA_UNIT_CURRENCY_EUR,
207            CurrencyUnit::GBP => crate::constants::HA_UNIT_CURRENCY_GBP,
208            CurrencyUnit::JPY => crate::constants::HA_UNIT_CURRENCY_JPY,
209            CurrencyUnit::CNY => crate::constants::HA_UNIT_CURRENCY_CNY,
210            CurrencyUnit::CAD => crate::constants::HA_UNIT_CURRENCY_CAD,
211            CurrencyUnit::AUD => crate::constants::HA_UNIT_CURRENCY_AUD,
212            CurrencyUnit::CHF => crate::constants::HA_UNIT_CURRENCY_CHF,
213            CurrencyUnit::INR => crate::constants::HA_UNIT_CURRENCY_INR,
214            CurrencyUnit::BRL => crate::constants::HA_UNIT_CURRENCY_BRL,
215            CurrencyUnit::Dollar => crate::constants::HA_UNIT_CURRENCY_DOLLAR,
216            CurrencyUnit::Euro => crate::constants::HA_UNIT_CURRENCY_EURO,
217            CurrencyUnit::Pound => crate::constants::HA_UNIT_CURRENCY_POUND,
218            CurrencyUnit::Yen => crate::constants::HA_UNIT_CURRENCY_YEN,
219            CurrencyUnit::Cent => crate::constants::HA_UNIT_CURRENCY_CENT,
220            CurrencyUnit::Other(other) => other,
221        }
222    }
223}
224
225#[derive(Debug, Clone, Copy, PartialEq, Eq)]
226pub enum NumberUnit {
227    // Energy
228    Joule,
229    KiloJoule,
230    MegaJoule,
231    GigaJoule,
232    MilliWattHour,
233    WattHour,
234    KiloWattHour,
235    MegaWattHour,
236    GigaWattHour,
237    TeraWattHour,
238    Calorie,
239    KiloCalorie,
240    MegaCalorie,
241    GigaCalorie,
242    // Temperature (°C, °F, K)
243    Celsius,
244    Fahrenheit,
245    Kelvin,
246    // Pressure
247    MilliPascal,
248    Pascal,
249    HectoPascal,
250    KiloPascal,
251    Bar,
252    CentiBar,
253    MilliBar,
254    MillimeterMercury,
255    InchMercury,
256    InchWater,
257    Psi,
258    // Volume
259    Liter,
260    MilliLiter,
261    Gallon,
262    FluidOunce,
263    CubicMeter,
264    CubicFoot,
265    CCF,
266    MCF,
267    // Speed
268    FeetPerSecond,
269    InchPerDay,
270    InchPerHour,
271    InchPerSecond,
272    KilometerPerHour,
273    Knot,
274    MeterPerSecond,
275    MilePerHour,
276    MillimeterPerDay,
277    MillimeterPerSecond,
278    // Distance
279    Kilometer,
280    Meter,
281    Centimeter,
282    Millimeter,
283    Mile,
284    NauticalMile,
285    Yard,
286    Inch,
287    // Power
288    MilliWatt,
289    Watt,
290    KiloWatt,
291    MegaWatt,
292    GigaWatt,
293    TeraWatt,
294    // Current
295    Ampere,
296    MilliAmpere,
297    // Voltage
298    Volt,
299    MilliVolt,
300    MicroVolt,
301    KiloVolt,
302    MegaVolt,
303    // Data Rate
304    BitPerSecond,
305    KiloBitPerSecond,
306    MegaBitPerSecond,
307    GigaBitPerSecond,
308    BytePerSecond,
309    KiloBytePerSecond,
310    MegaBytePerSecond,
311    GigaBytePerSecond,
312    KibiBytePerSecond,
313    MebiBytePerSecond,
314    GibiBytePerSecond,
315    // Weight
316    Kilogram,
317    Gram,
318    Milligram,
319    Microgram,
320    Ounce,
321    Pound,
322    Stone,
323    // Other
324    Percentage,
325    Other(&'static str),
326}
327
328impl NumberUnit {
329    pub fn as_str(&self) -> &'static str {
330        match self {
331            // Energy
332            NumberUnit::Joule => crate::constants::HA_UNIT_ENERGY_JOULE,
333            NumberUnit::KiloJoule => crate::constants::HA_UNIT_ENERGY_KILOJOULE,
334            NumberUnit::MegaJoule => crate::constants::HA_UNIT_ENERGY_MEGAJOULE,
335            NumberUnit::GigaJoule => crate::constants::HA_UNIT_ENERGY_GIGAJOULE,
336            NumberUnit::MilliWattHour => crate::constants::HA_UNIT_ENERGY_MILLIWATTHOUR,
337            NumberUnit::WattHour => crate::constants::HA_UNIT_ENERGY_WATTHOUR,
338            NumberUnit::KiloWattHour => crate::constants::HA_UNIT_ENERGY_KWH,
339            NumberUnit::MegaWattHour => crate::constants::HA_UNIT_ENERGY_MEGAWATTHOUR,
340            NumberUnit::GigaWattHour => crate::constants::HA_UNIT_ENERGY_GIGAWATTHOUR,
341            NumberUnit::TeraWattHour => crate::constants::HA_UNIT_ENERGY_TERAWATTHOUR,
342            NumberUnit::Calorie => crate::constants::HA_UNIT_ENERGY_CALORIE,
343            NumberUnit::KiloCalorie => crate::constants::HA_UNIT_ENERGY_KILOCALORIE,
344            NumberUnit::MegaCalorie => crate::constants::HA_UNIT_ENERGY_MEGACALORIE,
345            NumberUnit::GigaCalorie => crate::constants::HA_UNIT_ENERGY_GIGACALORIE,
346            // Temperature
347            NumberUnit::Celsius => crate::constants::HA_UNIT_TEMPERATURE_CELSIUS,
348            NumberUnit::Fahrenheit => crate::constants::HA_UNIT_TEMPERATURE_FAHRENHEIT,
349            NumberUnit::Kelvin => crate::constants::HA_UNIT_TEMPERATURE_KELVIN,
350            // Pressure
351            NumberUnit::MilliPascal => crate::constants::HA_UNIT_PRESSURE_MILLIPASCAL,
352            NumberUnit::Pascal => crate::constants::HA_UNIT_PRESSURE_PASCAL,
353            NumberUnit::HectoPascal => crate::constants::HA_UNIT_PRESSURE_HPA,
354            NumberUnit::KiloPascal => crate::constants::HA_UNIT_PRESSURE_KILOPASCAL,
355            NumberUnit::Bar => crate::constants::HA_UNIT_PRESSURE_BAR,
356            NumberUnit::CentiBar => crate::constants::HA_UNIT_PRESSURE_CENTIBAR,
357            NumberUnit::MilliBar => crate::constants::HA_UNIT_PRESSURE_MILLIBAR,
358            NumberUnit::MillimeterMercury => crate::constants::HA_UNIT_PRESSURE_MILLIMETER_MERCURY,
359            NumberUnit::InchMercury => crate::constants::HA_UNIT_PRESSURE_INCH_MERCURY,
360            NumberUnit::InchWater => crate::constants::HA_UNIT_PRESSURE_INCH_WATER,
361            NumberUnit::Psi => crate::constants::HA_UNIT_PRESSURE_PSI,
362            // Volume
363            NumberUnit::Liter => crate::constants::HA_UNIT_VOLUME_LITER,
364            NumberUnit::MilliLiter => crate::constants::HA_UNIT_VOLUME_MILLILITER,
365            NumberUnit::Gallon => crate::constants::HA_UNIT_VOLUME_GALLON,
366            NumberUnit::FluidOunce => crate::constants::HA_UNIT_VOLUME_FLUID_OUNCE,
367            NumberUnit::CubicMeter => crate::constants::HA_UNIT_VOLUME_CUBIC_METER,
368            NumberUnit::CubicFoot => crate::constants::HA_UNIT_VOLUME_CUBIC_FOOT,
369            NumberUnit::CCF => crate::constants::HA_UNIT_VOLUME_CCF,
370            NumberUnit::MCF => crate::constants::HA_UNIT_VOLUME_MCF,
371            // Speed
372            NumberUnit::FeetPerSecond => crate::constants::HA_UNIT_SPEED_FEET_PER_SECOND,
373            NumberUnit::InchPerDay => crate::constants::HA_UNIT_SPEED_INCH_PER_DAY,
374            NumberUnit::InchPerHour => crate::constants::HA_UNIT_SPEED_INCH_PER_HOUR,
375            NumberUnit::InchPerSecond => crate::constants::HA_UNIT_SPEED_INCH_PER_SECOND,
376            NumberUnit::KilometerPerHour => crate::constants::HA_UNIT_SPEED_KILOMETER_PER_HOUR,
377            NumberUnit::Knot => crate::constants::HA_UNIT_SPEED_KNOT,
378            NumberUnit::MeterPerSecond => crate::constants::HA_UNIT_SPEED_METER_PER_SECOND,
379            NumberUnit::MilePerHour => crate::constants::HA_UNIT_SPEED_MILE_PER_HOUR,
380            NumberUnit::MillimeterPerDay => crate::constants::HA_UNIT_SPEED_MILLIMETER_PER_DAY,
381            NumberUnit::MillimeterPerSecond => {
382                crate::constants::HA_UNIT_SPEED_MILLIMETER_PER_SECOND
383            }
384            // Distance
385            NumberUnit::Kilometer => crate::constants::HA_UNIT_DISTANCE_KILOMETER,
386            NumberUnit::Meter => crate::constants::HA_UNIT_DISTANCE_METER,
387            NumberUnit::Centimeter => crate::constants::HA_UNIT_DISTANCE_CENTIMETER,
388            NumberUnit::Millimeter => crate::constants::HA_UNIT_DISTANCE_MILLIMETER,
389            NumberUnit::Mile => crate::constants::HA_UNIT_DISTANCE_MILE,
390            NumberUnit::NauticalMile => crate::constants::HA_UNIT_DISTANCE_NAUTICAL_MILE,
391            NumberUnit::Yard => crate::constants::HA_UNIT_DISTANCE_YARD,
392            NumberUnit::Inch => crate::constants::HA_UNIT_DISTANCE_INCH,
393            // Power
394            NumberUnit::MilliWatt => crate::constants::HA_UNIT_POWER_MILLIWATT,
395            NumberUnit::Watt => crate::constants::HA_UNIT_POWER_WATT,
396            NumberUnit::KiloWatt => crate::constants::HA_UNIT_POWER_KILOWATT,
397            NumberUnit::MegaWatt => crate::constants::HA_UNIT_POWER_MEGAWATT,
398            NumberUnit::GigaWatt => crate::constants::HA_UNIT_POWER_GIGAWATT,
399            NumberUnit::TeraWatt => crate::constants::HA_UNIT_POWER_TERAWATT,
400            // Current
401            NumberUnit::Ampere => crate::constants::HA_UNIT_CURRENT_AMPERE,
402            NumberUnit::MilliAmpere => crate::constants::HA_UNIT_CURRENT_MILLIAMPERE,
403            // Voltage
404            NumberUnit::Volt => crate::constants::HA_UNIT_VOLTAGE_VOLT,
405            NumberUnit::MilliVolt => crate::constants::HA_UNIT_VOLTAGE_MILLIVOLT,
406            NumberUnit::MicroVolt => crate::constants::HA_UNIT_VOLTAGE_MICROVOLT,
407            NumberUnit::KiloVolt => crate::constants::HA_UNIT_VOLTAGE_KILOVOLT,
408            NumberUnit::MegaVolt => crate::constants::HA_UNIT_VOLTAGE_MEGAVOLT,
409            // Data Rate
410            NumberUnit::BitPerSecond => crate::constants::HA_UNIT_DATA_RATE_BIT_PER_SECOND,
411            NumberUnit::KiloBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_KILOBIT_PER_SECOND,
412            NumberUnit::MegaBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_MEGABIT_PER_SECOND,
413            NumberUnit::GigaBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_GIGABIT_PER_SECOND,
414            NumberUnit::BytePerSecond => crate::constants::HA_UNIT_DATA_RATE_BYTE_PER_SECOND,
415            NumberUnit::KiloBytePerSecond => {
416                crate::constants::HA_UNIT_DATA_RATE_KILOBYTE_PER_SECOND
417            }
418            NumberUnit::MegaBytePerSecond => {
419                crate::constants::HA_UNIT_DATA_RATE_MEGABYTE_PER_SECOND
420            }
421            NumberUnit::GigaBytePerSecond => {
422                crate::constants::HA_UNIT_DATA_RATE_GIGABYTE_PER_SECOND
423            }
424            NumberUnit::KibiBytePerSecond => {
425                crate::constants::HA_UNIT_DATA_RATE_KIBIBYTE_PER_SECOND
426            }
427            NumberUnit::MebiBytePerSecond => {
428                crate::constants::HA_UNIT_DATA_RATE_MEBIBYTE_PER_SECOND
429            }
430            NumberUnit::GibiBytePerSecond => {
431                crate::constants::HA_UNIT_DATA_RATE_GIBIBYTE_PER_SECOND
432            }
433            // Weight
434            NumberUnit::Kilogram => crate::constants::HA_UNIT_WEIGHT_KILOGRAM,
435            NumberUnit::Gram => crate::constants::HA_UNIT_WEIGHT_GRAM,
436            NumberUnit::Milligram => crate::constants::HA_UNIT_WEIGHT_MILLIGRAM,
437            NumberUnit::Microgram => crate::constants::HA_UNIT_WEIGHT_MICROGRAM,
438            NumberUnit::Ounce => crate::constants::HA_UNIT_WEIGHT_OUNCE,
439            NumberUnit::Pound => crate::constants::HA_UNIT_WEIGHT_POUND,
440            NumberUnit::Stone => crate::constants::HA_UNIT_WEIGHT_STONE,
441            // Other
442            NumberUnit::Percentage => crate::constants::HA_UNIT_PERCENTAGE,
443            NumberUnit::Other(other) => other,
444        }
445    }
446}
447
448#[derive(Debug, Clone, Copy, PartialEq, Eq)]
449pub enum Unit {
450    TemperatureCelcius,
451    TemperatureKelvin,
452    TemperatureFahrenheit,
453    HumidityPercentage,
454    BatteryPercentage,
455    LightLux,
456    PressureHectoPascal,
457    EnergyKiloWattHour,
458    SignalStrengthDbm,
459    TimeMilliseconds,
460    TimeSeconds,
461    TimeMinutes,
462    TimeHours,
463    TimeDays,
464    PowerWatt,
465    PowerKiloWatt,
466    VoltageVolt,
467    CurrentAmpere,
468    DistanceMillimeter,
469    DistanceCentimeter,
470    DistanceMeter,
471    DistanceKilometer,
472    CurrencyUSD,
473    CurrencyEUR,
474    CurrencyGBP,
475    CurrencyJPY,
476    CurrencyCNY,
477    CurrencyCAD,
478    CurrencyAUD,
479    CurrencyCHF,
480    CurrencyINR,
481    CurrencyBRL,
482    CurrencyDollar,
483    CurrencyEuro,
484    CurrencyPound,
485    CurrencyYen,
486    CurrencyCent,
487    // Number units
488    NumberJoule,
489    NumberKiloJoule,
490    NumberMegaJoule,
491    NumberGigaJoule,
492    NumberMilliWattHour,
493    NumberWattHour,
494    NumberKiloWattHour,
495    NumberMegaWattHour,
496    NumberGigaWattHour,
497    NumberTeraWattHour,
498    NumberCalorie,
499    NumberKiloCalorie,
500    NumberMegaCalorie,
501    NumberGigaCalorie,
502    NumberCelsius,
503    NumberFahrenheit,
504    NumberKelvin,
505    NumberMilliPascal,
506    NumberPascal,
507    NumberHectoPascal,
508    NumberKiloPascal,
509    NumberBar,
510    NumberCentiBar,
511    NumberMilliBar,
512    NumberMillimeterMercury,
513    NumberInchMercury,
514    NumberInchWater,
515    NumberPsi,
516    NumberLiter,
517    NumberMilliLiter,
518    NumberGallon,
519    NumberFluidOunce,
520    NumberCubicMeter,
521    NumberCubicFoot,
522    NumberCCF,
523    NumberMCF,
524    NumberFeetPerSecond,
525    NumberInchPerDay,
526    NumberInchPerHour,
527    NumberInchPerSecond,
528    NumberKilometerPerHour,
529    NumberKnot,
530    NumberMeterPerSecond,
531    NumberMilePerHour,
532    NumberMillimeterPerDay,
533    NumberMillimeterPerSecond,
534    NumberKilometer,
535    NumberMeter,
536    NumberCentimeter,
537    NumberMillimeter,
538    NumberMile,
539    NumberNauticalMile,
540    NumberYard,
541    NumberInch,
542    NumberMilliWatt,
543    NumberWatt,
544    NumberKiloWatt,
545    NumberMegaWatt,
546    NumberGigaWatt,
547    NumberTeraWatt,
548    NumberAmpere,
549    NumberMilliAmpere,
550    NumberVolt,
551    NumberMilliVolt,
552    NumberMicroVolt,
553    NumberKiloVolt,
554    NumberMegaVolt,
555    NumberBitPerSecond,
556    NumberKiloBitPerSecond,
557    NumberMegaBitPerSecond,
558    NumberGigaBitPerSecond,
559    NumberBytePerSecond,
560    NumberKiloBytePerSecond,
561    NumberMegaBytePerSecond,
562    NumberGigaBytePerSecond,
563    NumberKibiBytePerSecond,
564    NumberMebiBytePerSecond,
565    NumberGibiBytePerSecond,
566    NumberKilogram,
567    NumberGram,
568    NumberMilligram,
569    NumberMicrogram,
570    NumberOunce,
571    NumberPound,
572    NumberStone,
573    NumberPercentage,
574    Other(&'static str),
575}
576
577impl Unit {
578    pub fn as_str(&self) -> &'static str {
579        match self {
580            Unit::TemperatureCelcius => crate::constants::HA_UNIT_TEMPERATURE_CELSIUS,
581            Unit::TemperatureKelvin => crate::constants::HA_UNIT_TEMPERATURE_KELVIN,
582            Unit::TemperatureFahrenheit => crate::constants::HA_UNIT_TEMPERATURE_FAHRENHEIT,
583            Unit::HumidityPercentage => crate::constants::HA_UNIT_PERCENTAGE,
584            Unit::BatteryPercentage => crate::constants::HA_UNIT_PERCENTAGE,
585            Unit::LightLux => crate::constants::HA_UNIT_LIGHT_LUX,
586            Unit::PressureHectoPascal => crate::constants::HA_UNIT_PRESSURE_HPA,
587            Unit::EnergyKiloWattHour => crate::constants::HA_UNIT_ENERGY_KWH,
588            Unit::SignalStrengthDbm => crate::constants::HA_UNIT_SIGNAL_STRENGTH_DBM,
589            Unit::TimeMilliseconds => crate::constants::HA_UNIT_TIME_MILLISECONDS,
590            Unit::TimeSeconds => crate::constants::HA_UNIT_TIME_SECONDS,
591            Unit::TimeMinutes => crate::constants::HA_UNIT_TIME_MINUTES,
592            Unit::TimeHours => crate::constants::HA_UNIT_TIME_HOURS,
593            Unit::TimeDays => crate::constants::HA_UNIT_TIME_DAYS,
594            Unit::PowerWatt => crate::constants::HA_UNIT_POWER_WATT,
595            Unit::PowerKiloWatt => crate::constants::HA_UNIT_POWER_KILOWATT,
596            Unit::VoltageVolt => crate::constants::HA_UNIT_VOLTAGE_VOLT,
597            Unit::CurrentAmpere => crate::constants::HA_UNIT_CURRENT_AMPERE,
598            Unit::DistanceMillimeter => crate::constants::HA_UNIT_DISTANCE_MILLIMETER,
599            Unit::DistanceCentimeter => crate::constants::HA_UNIT_DISTANCE_CENTIMETER,
600            Unit::DistanceMeter => crate::constants::HA_UNIT_DISTANCE_METER,
601            Unit::DistanceKilometer => crate::constants::HA_UNIT_DISTANCE_KILOMETER,
602            Unit::CurrencyUSD => crate::constants::HA_UNIT_CURRENCY_USD,
603            Unit::CurrencyEUR => crate::constants::HA_UNIT_CURRENCY_EUR,
604            Unit::CurrencyGBP => crate::constants::HA_UNIT_CURRENCY_GBP,
605            Unit::CurrencyJPY => crate::constants::HA_UNIT_CURRENCY_JPY,
606            Unit::CurrencyCNY => crate::constants::HA_UNIT_CURRENCY_CNY,
607            Unit::CurrencyCAD => crate::constants::HA_UNIT_CURRENCY_CAD,
608            Unit::CurrencyAUD => crate::constants::HA_UNIT_CURRENCY_AUD,
609            Unit::CurrencyCHF => crate::constants::HA_UNIT_CURRENCY_CHF,
610            Unit::CurrencyINR => crate::constants::HA_UNIT_CURRENCY_INR,
611            Unit::CurrencyBRL => crate::constants::HA_UNIT_CURRENCY_BRL,
612            Unit::CurrencyDollar => crate::constants::HA_UNIT_CURRENCY_DOLLAR,
613            Unit::CurrencyEuro => crate::constants::HA_UNIT_CURRENCY_EURO,
614            Unit::CurrencyPound => crate::constants::HA_UNIT_CURRENCY_POUND,
615            Unit::CurrencyYen => crate::constants::HA_UNIT_CURRENCY_YEN,
616            Unit::CurrencyCent => crate::constants::HA_UNIT_CURRENCY_CENT,
617            // Number units
618            Unit::NumberJoule => crate::constants::HA_UNIT_ENERGY_JOULE,
619            Unit::NumberKiloJoule => crate::constants::HA_UNIT_ENERGY_KILOJOULE,
620            Unit::NumberMegaJoule => crate::constants::HA_UNIT_ENERGY_MEGAJOULE,
621            Unit::NumberGigaJoule => crate::constants::HA_UNIT_ENERGY_GIGAJOULE,
622            Unit::NumberMilliWattHour => crate::constants::HA_UNIT_ENERGY_MILLIWATTHOUR,
623            Unit::NumberWattHour => crate::constants::HA_UNIT_ENERGY_WATTHOUR,
624            Unit::NumberKiloWattHour => crate::constants::HA_UNIT_ENERGY_KWH,
625            Unit::NumberMegaWattHour => crate::constants::HA_UNIT_ENERGY_MEGAWATTHOUR,
626            Unit::NumberGigaWattHour => crate::constants::HA_UNIT_ENERGY_GIGAWATTHOUR,
627            Unit::NumberTeraWattHour => crate::constants::HA_UNIT_ENERGY_TERAWATTHOUR,
628            Unit::NumberCalorie => crate::constants::HA_UNIT_ENERGY_CALORIE,
629            Unit::NumberKiloCalorie => crate::constants::HA_UNIT_ENERGY_KILOCALORIE,
630            Unit::NumberMegaCalorie => crate::constants::HA_UNIT_ENERGY_MEGACALORIE,
631            Unit::NumberGigaCalorie => crate::constants::HA_UNIT_ENERGY_GIGACALORIE,
632            Unit::NumberCelsius => crate::constants::HA_UNIT_TEMPERATURE_CELSIUS,
633            Unit::NumberFahrenheit => crate::constants::HA_UNIT_TEMPERATURE_FAHRENHEIT,
634            Unit::NumberKelvin => crate::constants::HA_UNIT_TEMPERATURE_KELVIN,
635            Unit::NumberMilliPascal => crate::constants::HA_UNIT_PRESSURE_MILLIPASCAL,
636            Unit::NumberPascal => crate::constants::HA_UNIT_PRESSURE_PASCAL,
637            Unit::NumberHectoPascal => crate::constants::HA_UNIT_PRESSURE_HPA,
638            Unit::NumberKiloPascal => crate::constants::HA_UNIT_PRESSURE_KILOPASCAL,
639            Unit::NumberBar => crate::constants::HA_UNIT_PRESSURE_BAR,
640            Unit::NumberCentiBar => crate::constants::HA_UNIT_PRESSURE_CENTIBAR,
641            Unit::NumberMilliBar => crate::constants::HA_UNIT_PRESSURE_MILLIBAR,
642            Unit::NumberMillimeterMercury => crate::constants::HA_UNIT_PRESSURE_MILLIMETER_MERCURY,
643            Unit::NumberInchMercury => crate::constants::HA_UNIT_PRESSURE_INCH_MERCURY,
644            Unit::NumberInchWater => crate::constants::HA_UNIT_PRESSURE_INCH_WATER,
645            Unit::NumberPsi => crate::constants::HA_UNIT_PRESSURE_PSI,
646            Unit::NumberLiter => crate::constants::HA_UNIT_VOLUME_LITER,
647            Unit::NumberMilliLiter => crate::constants::HA_UNIT_VOLUME_MILLILITER,
648            Unit::NumberGallon => crate::constants::HA_UNIT_VOLUME_GALLON,
649            Unit::NumberFluidOunce => crate::constants::HA_UNIT_VOLUME_FLUID_OUNCE,
650            Unit::NumberCubicMeter => crate::constants::HA_UNIT_VOLUME_CUBIC_METER,
651            Unit::NumberCubicFoot => crate::constants::HA_UNIT_VOLUME_CUBIC_FOOT,
652            Unit::NumberCCF => crate::constants::HA_UNIT_VOLUME_CCF,
653            Unit::NumberMCF => crate::constants::HA_UNIT_VOLUME_MCF,
654            Unit::NumberFeetPerSecond => crate::constants::HA_UNIT_SPEED_FEET_PER_SECOND,
655            Unit::NumberInchPerDay => crate::constants::HA_UNIT_SPEED_INCH_PER_DAY,
656            Unit::NumberInchPerHour => crate::constants::HA_UNIT_SPEED_INCH_PER_HOUR,
657            Unit::NumberInchPerSecond => crate::constants::HA_UNIT_SPEED_INCH_PER_SECOND,
658            Unit::NumberKilometerPerHour => crate::constants::HA_UNIT_SPEED_KILOMETER_PER_HOUR,
659            Unit::NumberKnot => crate::constants::HA_UNIT_SPEED_KNOT,
660            Unit::NumberMeterPerSecond => crate::constants::HA_UNIT_SPEED_METER_PER_SECOND,
661            Unit::NumberMilePerHour => crate::constants::HA_UNIT_SPEED_MILE_PER_HOUR,
662            Unit::NumberMillimeterPerDay => crate::constants::HA_UNIT_SPEED_MILLIMETER_PER_DAY,
663            Unit::NumberMillimeterPerSecond => {
664                crate::constants::HA_UNIT_SPEED_MILLIMETER_PER_SECOND
665            }
666            Unit::NumberKilometer => crate::constants::HA_UNIT_DISTANCE_KILOMETER,
667            Unit::NumberMeter => crate::constants::HA_UNIT_DISTANCE_METER,
668            Unit::NumberCentimeter => crate::constants::HA_UNIT_DISTANCE_CENTIMETER,
669            Unit::NumberMillimeter => crate::constants::HA_UNIT_DISTANCE_MILLIMETER,
670            Unit::NumberMile => crate::constants::HA_UNIT_DISTANCE_MILE,
671            Unit::NumberNauticalMile => crate::constants::HA_UNIT_DISTANCE_NAUTICAL_MILE,
672            Unit::NumberYard => crate::constants::HA_UNIT_DISTANCE_YARD,
673            Unit::NumberInch => crate::constants::HA_UNIT_DISTANCE_INCH,
674            Unit::NumberMilliWatt => crate::constants::HA_UNIT_POWER_MILLIWATT,
675            Unit::NumberWatt => crate::constants::HA_UNIT_POWER_WATT,
676            Unit::NumberKiloWatt => crate::constants::HA_UNIT_POWER_KILOWATT,
677            Unit::NumberMegaWatt => crate::constants::HA_UNIT_POWER_MEGAWATT,
678            Unit::NumberGigaWatt => crate::constants::HA_UNIT_POWER_GIGAWATT,
679            Unit::NumberTeraWatt => crate::constants::HA_UNIT_POWER_TERAWATT,
680            Unit::NumberAmpere => crate::constants::HA_UNIT_CURRENT_AMPERE,
681            Unit::NumberMilliAmpere => crate::constants::HA_UNIT_CURRENT_MILLIAMPERE,
682            Unit::NumberVolt => crate::constants::HA_UNIT_VOLTAGE_VOLT,
683            Unit::NumberMilliVolt => crate::constants::HA_UNIT_VOLTAGE_MILLIVOLT,
684            Unit::NumberMicroVolt => crate::constants::HA_UNIT_VOLTAGE_MICROVOLT,
685            Unit::NumberKiloVolt => crate::constants::HA_UNIT_VOLTAGE_KILOVOLT,
686            Unit::NumberMegaVolt => crate::constants::HA_UNIT_VOLTAGE_MEGAVOLT,
687            Unit::NumberBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_BIT_PER_SECOND,
688            Unit::NumberKiloBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_KILOBIT_PER_SECOND,
689            Unit::NumberMegaBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_MEGABIT_PER_SECOND,
690            Unit::NumberGigaBitPerSecond => crate::constants::HA_UNIT_DATA_RATE_GIGABIT_PER_SECOND,
691            Unit::NumberBytePerSecond => crate::constants::HA_UNIT_DATA_RATE_BYTE_PER_SECOND,
692            Unit::NumberKiloBytePerSecond => {
693                crate::constants::HA_UNIT_DATA_RATE_KILOBYTE_PER_SECOND
694            }
695            Unit::NumberMegaBytePerSecond => {
696                crate::constants::HA_UNIT_DATA_RATE_MEGABYTE_PER_SECOND
697            }
698            Unit::NumberGigaBytePerSecond => {
699                crate::constants::HA_UNIT_DATA_RATE_GIGABYTE_PER_SECOND
700            }
701            Unit::NumberKibiBytePerSecond => {
702                crate::constants::HA_UNIT_DATA_RATE_KIBIBYTE_PER_SECOND
703            }
704            Unit::NumberMebiBytePerSecond => {
705                crate::constants::HA_UNIT_DATA_RATE_MEBIBYTE_PER_SECOND
706            }
707            Unit::NumberGibiBytePerSecond => {
708                crate::constants::HA_UNIT_DATA_RATE_GIBIBYTE_PER_SECOND
709            }
710            Unit::NumberKilogram => crate::constants::HA_UNIT_WEIGHT_KILOGRAM,
711            Unit::NumberGram => crate::constants::HA_UNIT_WEIGHT_GRAM,
712            Unit::NumberMilligram => crate::constants::HA_UNIT_WEIGHT_MILLIGRAM,
713            Unit::NumberMicrogram => crate::constants::HA_UNIT_WEIGHT_MICROGRAM,
714            Unit::NumberOunce => crate::constants::HA_UNIT_WEIGHT_OUNCE,
715            Unit::NumberPound => crate::constants::HA_UNIT_WEIGHT_POUND,
716            Unit::NumberStone => crate::constants::HA_UNIT_WEIGHT_STONE,
717            Unit::NumberPercentage => crate::constants::HA_UNIT_PERCENTAGE,
718            Unit::Other(other) => other,
719        }
720    }
721}
722
723// From conversions
724impl From<TemperatureUnit> for Unit {
725    fn from(unit: TemperatureUnit) -> Self {
726        match unit {
727            TemperatureUnit::Celcius => Unit::TemperatureCelcius,
728            TemperatureUnit::Kelvin => Unit::TemperatureKelvin,
729            TemperatureUnit::Fahrenheit => Unit::TemperatureFahrenheit,
730            TemperatureUnit::Other(other) => Unit::Other(other),
731        }
732    }
733}
734
735impl From<HumidityUnit> for Unit {
736    fn from(unit: HumidityUnit) -> Self {
737        match unit {
738            HumidityUnit::Percentage => Unit::HumidityPercentage,
739            HumidityUnit::Other(other) => Unit::Other(other),
740        }
741    }
742}
743
744impl From<BatteryUnit> for Unit {
745    fn from(unit: BatteryUnit) -> Self {
746        match unit {
747            BatteryUnit::Percentage => Unit::BatteryPercentage,
748        }
749    }
750}
751
752impl From<LightUnit> for Unit {
753    fn from(unit: LightUnit) -> Self {
754        match unit {
755            LightUnit::Lux => Unit::LightLux,
756        }
757    }
758}
759
760impl From<PressureUnit> for Unit {
761    fn from(unit: PressureUnit) -> Self {
762        match unit {
763            PressureUnit::HectoPascal => Unit::PressureHectoPascal,
764        }
765    }
766}
767
768impl From<SignalStrengthUnit> for Unit {
769    fn from(unit: SignalStrengthUnit) -> Self {
770        match unit {
771            SignalStrengthUnit::Dbm => Unit::SignalStrengthDbm,
772        }
773    }
774}
775
776impl From<EnergyUnit> for Unit {
777    fn from(unit: EnergyUnit) -> Self {
778        match unit {
779            EnergyUnit::KiloWattHour => Unit::EnergyKiloWattHour,
780        }
781    }
782}
783
784impl From<TimeUnit> for Unit {
785    fn from(unit: TimeUnit) -> Self {
786        match unit {
787            TimeUnit::Milliseconds => Unit::TimeMilliseconds,
788            TimeUnit::Seconds => Unit::TimeSeconds,
789            TimeUnit::Minutes => Unit::TimeMinutes,
790            TimeUnit::Hours => Unit::TimeHours,
791            TimeUnit::Days => Unit::TimeDays,
792        }
793    }
794}
795
796impl From<PowerUnit> for Unit {
797    fn from(unit: PowerUnit) -> Self {
798        match unit {
799            PowerUnit::Watt => Unit::PowerWatt,
800            PowerUnit::KiloWatt => Unit::PowerKiloWatt,
801        }
802    }
803}
804
805impl From<VoltageUnit> for Unit {
806    fn from(unit: VoltageUnit) -> Self {
807        match unit {
808            VoltageUnit::Volt => Unit::VoltageVolt,
809        }
810    }
811}
812
813impl From<CurrentUnit> for Unit {
814    fn from(unit: CurrentUnit) -> Self {
815        match unit {
816            CurrentUnit::Ampere => Unit::CurrentAmpere,
817        }
818    }
819}
820
821impl From<DistanceUnit> for Unit {
822    fn from(unit: DistanceUnit) -> Self {
823        match unit {
824            DistanceUnit::Millimeter => Unit::DistanceMillimeter,
825            DistanceUnit::Centimeter => Unit::DistanceCentimeter,
826            DistanceUnit::Meter => Unit::DistanceMeter,
827            DistanceUnit::Kilometer => Unit::DistanceKilometer,
828        }
829    }
830}
831
832impl From<CurrencyUnit> for Unit {
833    fn from(unit: CurrencyUnit) -> Self {
834        match unit {
835            CurrencyUnit::USD => Unit::CurrencyUSD,
836            CurrencyUnit::EUR => Unit::CurrencyEUR,
837            CurrencyUnit::GBP => Unit::CurrencyGBP,
838            CurrencyUnit::JPY => Unit::CurrencyJPY,
839            CurrencyUnit::CNY => Unit::CurrencyCNY,
840            CurrencyUnit::CAD => Unit::CurrencyCAD,
841            CurrencyUnit::AUD => Unit::CurrencyAUD,
842            CurrencyUnit::CHF => Unit::CurrencyCHF,
843            CurrencyUnit::INR => Unit::CurrencyINR,
844            CurrencyUnit::BRL => Unit::CurrencyBRL,
845            CurrencyUnit::Dollar => Unit::CurrencyDollar,
846            CurrencyUnit::Euro => Unit::CurrencyEuro,
847            CurrencyUnit::Pound => Unit::CurrencyPound,
848            CurrencyUnit::Yen => Unit::CurrencyYen,
849            CurrencyUnit::Cent => Unit::CurrencyCent,
850            CurrencyUnit::Other(other) => Unit::Other(other),
851        }
852    }
853}
854
855impl From<NumberUnit> for Unit {
856    fn from(unit: NumberUnit) -> Self {
857        match unit {
858            NumberUnit::Joule => Unit::NumberJoule,
859            NumberUnit::KiloJoule => Unit::NumberKiloJoule,
860            NumberUnit::MegaJoule => Unit::NumberMegaJoule,
861            NumberUnit::GigaJoule => Unit::NumberGigaJoule,
862            NumberUnit::MilliWattHour => Unit::NumberMilliWattHour,
863            NumberUnit::WattHour => Unit::NumberWattHour,
864            NumberUnit::KiloWattHour => Unit::NumberKiloWattHour,
865            NumberUnit::MegaWattHour => Unit::NumberMegaWattHour,
866            NumberUnit::GigaWattHour => Unit::NumberGigaWattHour,
867            NumberUnit::TeraWattHour => Unit::NumberTeraWattHour,
868            NumberUnit::Calorie => Unit::NumberCalorie,
869            NumberUnit::KiloCalorie => Unit::NumberKiloCalorie,
870            NumberUnit::MegaCalorie => Unit::NumberMegaCalorie,
871            NumberUnit::GigaCalorie => Unit::NumberGigaCalorie,
872            NumberUnit::Celsius => Unit::NumberCelsius,
873            NumberUnit::Fahrenheit => Unit::NumberFahrenheit,
874            NumberUnit::Kelvin => Unit::NumberKelvin,
875            NumberUnit::MilliPascal => Unit::NumberMilliPascal,
876            NumberUnit::Pascal => Unit::NumberPascal,
877            NumberUnit::HectoPascal => Unit::NumberHectoPascal,
878            NumberUnit::KiloPascal => Unit::NumberKiloPascal,
879            NumberUnit::Bar => Unit::NumberBar,
880            NumberUnit::CentiBar => Unit::NumberCentiBar,
881            NumberUnit::MilliBar => Unit::NumberMilliBar,
882            NumberUnit::MillimeterMercury => Unit::NumberMillimeterMercury,
883            NumberUnit::InchMercury => Unit::NumberInchMercury,
884            NumberUnit::InchWater => Unit::NumberInchWater,
885            NumberUnit::Psi => Unit::NumberPsi,
886            NumberUnit::Liter => Unit::NumberLiter,
887            NumberUnit::MilliLiter => Unit::NumberMilliLiter,
888            NumberUnit::Gallon => Unit::NumberGallon,
889            NumberUnit::FluidOunce => Unit::NumberFluidOunce,
890            NumberUnit::CubicMeter => Unit::NumberCubicMeter,
891            NumberUnit::CubicFoot => Unit::NumberCubicFoot,
892            NumberUnit::CCF => Unit::NumberCCF,
893            NumberUnit::MCF => Unit::NumberMCF,
894            NumberUnit::FeetPerSecond => Unit::NumberFeetPerSecond,
895            NumberUnit::InchPerDay => Unit::NumberInchPerDay,
896            NumberUnit::InchPerHour => Unit::NumberInchPerHour,
897            NumberUnit::InchPerSecond => Unit::NumberInchPerSecond,
898            NumberUnit::KilometerPerHour => Unit::NumberKilometerPerHour,
899            NumberUnit::Knot => Unit::NumberKnot,
900            NumberUnit::MeterPerSecond => Unit::NumberMeterPerSecond,
901            NumberUnit::MilePerHour => Unit::NumberMilePerHour,
902            NumberUnit::MillimeterPerDay => Unit::NumberMillimeterPerDay,
903            NumberUnit::MillimeterPerSecond => Unit::NumberMillimeterPerSecond,
904            NumberUnit::Kilometer => Unit::NumberKilometer,
905            NumberUnit::Meter => Unit::NumberMeter,
906            NumberUnit::Centimeter => Unit::NumberCentimeter,
907            NumberUnit::Millimeter => Unit::NumberMillimeter,
908            NumberUnit::Mile => Unit::NumberMile,
909            NumberUnit::NauticalMile => Unit::NumberNauticalMile,
910            NumberUnit::Yard => Unit::NumberYard,
911            NumberUnit::Inch => Unit::NumberInch,
912            NumberUnit::MilliWatt => Unit::NumberMilliWatt,
913            NumberUnit::Watt => Unit::NumberWatt,
914            NumberUnit::KiloWatt => Unit::NumberKiloWatt,
915            NumberUnit::MegaWatt => Unit::NumberMegaWatt,
916            NumberUnit::GigaWatt => Unit::NumberGigaWatt,
917            NumberUnit::TeraWatt => Unit::NumberTeraWatt,
918            NumberUnit::Ampere => Unit::NumberAmpere,
919            NumberUnit::MilliAmpere => Unit::NumberMilliAmpere,
920            NumberUnit::Volt => Unit::NumberVolt,
921            NumberUnit::MilliVolt => Unit::NumberMilliVolt,
922            NumberUnit::MicroVolt => Unit::NumberMicroVolt,
923            NumberUnit::KiloVolt => Unit::NumberKiloVolt,
924            NumberUnit::MegaVolt => Unit::NumberMegaVolt,
925            NumberUnit::BitPerSecond => Unit::NumberBitPerSecond,
926            NumberUnit::KiloBitPerSecond => Unit::NumberKiloBitPerSecond,
927            NumberUnit::MegaBitPerSecond => Unit::NumberMegaBitPerSecond,
928            NumberUnit::GigaBitPerSecond => Unit::NumberGigaBitPerSecond,
929            NumberUnit::BytePerSecond => Unit::NumberBytePerSecond,
930            NumberUnit::KiloBytePerSecond => Unit::NumberKiloBytePerSecond,
931            NumberUnit::MegaBytePerSecond => Unit::NumberMegaBytePerSecond,
932            NumberUnit::GigaBytePerSecond => Unit::NumberGigaBytePerSecond,
933            NumberUnit::KibiBytePerSecond => Unit::NumberKibiBytePerSecond,
934            NumberUnit::MebiBytePerSecond => Unit::NumberMebiBytePerSecond,
935            NumberUnit::GibiBytePerSecond => Unit::NumberGibiBytePerSecond,
936            NumberUnit::Kilogram => Unit::NumberKilogram,
937            NumberUnit::Gram => Unit::NumberGram,
938            NumberUnit::Milligram => Unit::NumberMilligram,
939            NumberUnit::Microgram => Unit::NumberMicrogram,
940            NumberUnit::Ounce => Unit::NumberOunce,
941            NumberUnit::Pound => Unit::NumberPound,
942            NumberUnit::Stone => Unit::NumberStone,
943            NumberUnit::Percentage => Unit::NumberPercentage,
944            NumberUnit::Other(other) => Unit::Other(other),
945        }
946    }
947}
948
949// TryFrom conversions
950#[derive(Debug, Clone, Copy, PartialEq, Eq)]
951pub struct UnitConversionError;
952
953impl TryFrom<Unit> for TemperatureUnit {
954    type Error = UnitConversionError;
955
956    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
957        match unit {
958            Unit::TemperatureCelcius => Ok(TemperatureUnit::Celcius),
959            Unit::TemperatureKelvin => Ok(TemperatureUnit::Kelvin),
960            Unit::TemperatureFahrenheit => Ok(TemperatureUnit::Fahrenheit),
961            Unit::Other(other) => Ok(TemperatureUnit::Other(other)),
962            _ => Err(UnitConversionError),
963        }
964    }
965}
966
967impl TryFrom<Unit> for HumidityUnit {
968    type Error = UnitConversionError;
969
970    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
971        match unit {
972            Unit::HumidityPercentage => Ok(HumidityUnit::Percentage),
973            Unit::Other(other) => Ok(HumidityUnit::Other(other)),
974            _ => Err(UnitConversionError),
975        }
976    }
977}
978
979impl TryFrom<Unit> for BatteryUnit {
980    type Error = UnitConversionError;
981
982    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
983        match unit {
984            Unit::BatteryPercentage => Ok(BatteryUnit::Percentage),
985            _ => Err(UnitConversionError),
986        }
987    }
988}
989
990impl TryFrom<Unit> for LightUnit {
991    type Error = UnitConversionError;
992
993    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
994        match unit {
995            Unit::LightLux => Ok(LightUnit::Lux),
996            _ => Err(UnitConversionError),
997        }
998    }
999}
1000
1001impl TryFrom<Unit> for PressureUnit {
1002    type Error = UnitConversionError;
1003
1004    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1005        match unit {
1006            Unit::PressureHectoPascal => Ok(PressureUnit::HectoPascal),
1007            _ => Err(UnitConversionError),
1008        }
1009    }
1010}
1011
1012impl TryFrom<Unit> for SignalStrengthUnit {
1013    type Error = UnitConversionError;
1014
1015    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1016        match unit {
1017            Unit::SignalStrengthDbm => Ok(SignalStrengthUnit::Dbm),
1018            _ => Err(UnitConversionError),
1019        }
1020    }
1021}
1022
1023impl TryFrom<Unit> for EnergyUnit {
1024    type Error = UnitConversionError;
1025
1026    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1027        match unit {
1028            Unit::EnergyKiloWattHour => Ok(EnergyUnit::KiloWattHour),
1029            _ => Err(UnitConversionError),
1030        }
1031    }
1032}
1033
1034impl TryFrom<Unit> for TimeUnit {
1035    type Error = UnitConversionError;
1036
1037    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1038        match unit {
1039            Unit::TimeMilliseconds => Ok(TimeUnit::Milliseconds),
1040            Unit::TimeSeconds => Ok(TimeUnit::Seconds),
1041            Unit::TimeMinutes => Ok(TimeUnit::Minutes),
1042            Unit::TimeHours => Ok(TimeUnit::Hours),
1043            Unit::TimeDays => Ok(TimeUnit::Days),
1044            _ => Err(UnitConversionError),
1045        }
1046    }
1047}
1048
1049impl TryFrom<Unit> for PowerUnit {
1050    type Error = UnitConversionError;
1051
1052    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1053        match unit {
1054            Unit::PowerWatt => Ok(PowerUnit::Watt),
1055            Unit::PowerKiloWatt => Ok(PowerUnit::KiloWatt),
1056            _ => Err(UnitConversionError),
1057        }
1058    }
1059}
1060
1061impl TryFrom<Unit> for VoltageUnit {
1062    type Error = UnitConversionError;
1063
1064    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1065        match unit {
1066            Unit::VoltageVolt => Ok(VoltageUnit::Volt),
1067            _ => Err(UnitConversionError),
1068        }
1069    }
1070}
1071
1072impl TryFrom<Unit> for CurrentUnit {
1073    type Error = UnitConversionError;
1074
1075    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1076        match unit {
1077            Unit::CurrentAmpere => Ok(CurrentUnit::Ampere),
1078            _ => Err(UnitConversionError),
1079        }
1080    }
1081}
1082
1083impl TryFrom<Unit> for DistanceUnit {
1084    type Error = UnitConversionError;
1085
1086    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1087        match unit {
1088            Unit::DistanceMillimeter => Ok(DistanceUnit::Millimeter),
1089            Unit::DistanceCentimeter => Ok(DistanceUnit::Centimeter),
1090            Unit::DistanceMeter => Ok(DistanceUnit::Meter),
1091            Unit::DistanceKilometer => Ok(DistanceUnit::Kilometer),
1092            _ => Err(UnitConversionError),
1093        }
1094    }
1095}
1096
1097impl TryFrom<Unit> for CurrencyUnit {
1098    type Error = UnitConversionError;
1099
1100    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1101        match unit {
1102            Unit::CurrencyUSD => Ok(CurrencyUnit::USD),
1103            Unit::CurrencyEUR => Ok(CurrencyUnit::EUR),
1104            Unit::CurrencyGBP => Ok(CurrencyUnit::GBP),
1105            Unit::CurrencyJPY => Ok(CurrencyUnit::JPY),
1106            Unit::CurrencyCNY => Ok(CurrencyUnit::CNY),
1107            Unit::CurrencyCAD => Ok(CurrencyUnit::CAD),
1108            Unit::CurrencyAUD => Ok(CurrencyUnit::AUD),
1109            Unit::CurrencyCHF => Ok(CurrencyUnit::CHF),
1110            Unit::CurrencyINR => Ok(CurrencyUnit::INR),
1111            Unit::CurrencyBRL => Ok(CurrencyUnit::BRL),
1112            Unit::CurrencyDollar => Ok(CurrencyUnit::Dollar),
1113            Unit::CurrencyEuro => Ok(CurrencyUnit::Euro),
1114            Unit::CurrencyPound => Ok(CurrencyUnit::Pound),
1115            Unit::CurrencyYen => Ok(CurrencyUnit::Yen),
1116            Unit::CurrencyCent => Ok(CurrencyUnit::Cent),
1117            Unit::Other(other) => Ok(CurrencyUnit::Other(other)),
1118            _ => Err(UnitConversionError),
1119        }
1120    }
1121}
1122
1123impl TryFrom<Unit> for NumberUnit {
1124    type Error = UnitConversionError;
1125
1126    fn try_from(unit: Unit) -> Result<Self, Self::Error> {
1127        match unit {
1128            Unit::NumberJoule => Ok(NumberUnit::Joule),
1129            Unit::NumberKiloJoule => Ok(NumberUnit::KiloJoule),
1130            Unit::NumberMegaJoule => Ok(NumberUnit::MegaJoule),
1131            Unit::NumberGigaJoule => Ok(NumberUnit::GigaJoule),
1132            Unit::NumberMilliWattHour => Ok(NumberUnit::MilliWattHour),
1133            Unit::NumberWattHour => Ok(NumberUnit::WattHour),
1134            Unit::NumberKiloWattHour => Ok(NumberUnit::KiloWattHour),
1135            Unit::NumberMegaWattHour => Ok(NumberUnit::MegaWattHour),
1136            Unit::NumberGigaWattHour => Ok(NumberUnit::GigaWattHour),
1137            Unit::NumberTeraWattHour => Ok(NumberUnit::TeraWattHour),
1138            Unit::NumberCalorie => Ok(NumberUnit::Calorie),
1139            Unit::NumberKiloCalorie => Ok(NumberUnit::KiloCalorie),
1140            Unit::NumberMegaCalorie => Ok(NumberUnit::MegaCalorie),
1141            Unit::NumberGigaCalorie => Ok(NumberUnit::GigaCalorie),
1142            Unit::NumberCelsius => Ok(NumberUnit::Celsius),
1143            Unit::NumberFahrenheit => Ok(NumberUnit::Fahrenheit),
1144            Unit::NumberKelvin => Ok(NumberUnit::Kelvin),
1145            Unit::NumberMilliPascal => Ok(NumberUnit::MilliPascal),
1146            Unit::NumberPascal => Ok(NumberUnit::Pascal),
1147            Unit::NumberHectoPascal => Ok(NumberUnit::HectoPascal),
1148            Unit::NumberKiloPascal => Ok(NumberUnit::KiloPascal),
1149            Unit::NumberBar => Ok(NumberUnit::Bar),
1150            Unit::NumberCentiBar => Ok(NumberUnit::CentiBar),
1151            Unit::NumberMilliBar => Ok(NumberUnit::MilliBar),
1152            Unit::NumberMillimeterMercury => Ok(NumberUnit::MillimeterMercury),
1153            Unit::NumberInchMercury => Ok(NumberUnit::InchMercury),
1154            Unit::NumberInchWater => Ok(NumberUnit::InchWater),
1155            Unit::NumberPsi => Ok(NumberUnit::Psi),
1156            Unit::NumberLiter => Ok(NumberUnit::Liter),
1157            Unit::NumberMilliLiter => Ok(NumberUnit::MilliLiter),
1158            Unit::NumberGallon => Ok(NumberUnit::Gallon),
1159            Unit::NumberFluidOunce => Ok(NumberUnit::FluidOunce),
1160            Unit::NumberCubicMeter => Ok(NumberUnit::CubicMeter),
1161            Unit::NumberCubicFoot => Ok(NumberUnit::CubicFoot),
1162            Unit::NumberCCF => Ok(NumberUnit::CCF),
1163            Unit::NumberMCF => Ok(NumberUnit::MCF),
1164            Unit::NumberFeetPerSecond => Ok(NumberUnit::FeetPerSecond),
1165            Unit::NumberInchPerDay => Ok(NumberUnit::InchPerDay),
1166            Unit::NumberInchPerHour => Ok(NumberUnit::InchPerHour),
1167            Unit::NumberInchPerSecond => Ok(NumberUnit::InchPerSecond),
1168            Unit::NumberKilometerPerHour => Ok(NumberUnit::KilometerPerHour),
1169            Unit::NumberKnot => Ok(NumberUnit::Knot),
1170            Unit::NumberMeterPerSecond => Ok(NumberUnit::MeterPerSecond),
1171            Unit::NumberMilePerHour => Ok(NumberUnit::MilePerHour),
1172            Unit::NumberMillimeterPerDay => Ok(NumberUnit::MillimeterPerDay),
1173            Unit::NumberMillimeterPerSecond => Ok(NumberUnit::MillimeterPerSecond),
1174            Unit::NumberKilometer => Ok(NumberUnit::Kilometer),
1175            Unit::NumberMeter => Ok(NumberUnit::Meter),
1176            Unit::NumberCentimeter => Ok(NumberUnit::Centimeter),
1177            Unit::NumberMillimeter => Ok(NumberUnit::Millimeter),
1178            Unit::NumberMile => Ok(NumberUnit::Mile),
1179            Unit::NumberNauticalMile => Ok(NumberUnit::NauticalMile),
1180            Unit::NumberYard => Ok(NumberUnit::Yard),
1181            Unit::NumberInch => Ok(NumberUnit::Inch),
1182            Unit::NumberMilliWatt => Ok(NumberUnit::MilliWatt),
1183            Unit::NumberWatt => Ok(NumberUnit::Watt),
1184            Unit::NumberKiloWatt => Ok(NumberUnit::KiloWatt),
1185            Unit::NumberMegaWatt => Ok(NumberUnit::MegaWatt),
1186            Unit::NumberGigaWatt => Ok(NumberUnit::GigaWatt),
1187            Unit::NumberTeraWatt => Ok(NumberUnit::TeraWatt),
1188            Unit::NumberAmpere => Ok(NumberUnit::Ampere),
1189            Unit::NumberMilliAmpere => Ok(NumberUnit::MilliAmpere),
1190            Unit::NumberVolt => Ok(NumberUnit::Volt),
1191            Unit::NumberMilliVolt => Ok(NumberUnit::MilliVolt),
1192            Unit::NumberMicroVolt => Ok(NumberUnit::MicroVolt),
1193            Unit::NumberKiloVolt => Ok(NumberUnit::KiloVolt),
1194            Unit::NumberMegaVolt => Ok(NumberUnit::MegaVolt),
1195            Unit::NumberBitPerSecond => Ok(NumberUnit::BitPerSecond),
1196            Unit::NumberKiloBitPerSecond => Ok(NumberUnit::KiloBitPerSecond),
1197            Unit::NumberMegaBitPerSecond => Ok(NumberUnit::MegaBitPerSecond),
1198            Unit::NumberGigaBitPerSecond => Ok(NumberUnit::GigaBitPerSecond),
1199            Unit::NumberBytePerSecond => Ok(NumberUnit::BytePerSecond),
1200            Unit::NumberKiloBytePerSecond => Ok(NumberUnit::KiloBytePerSecond),
1201            Unit::NumberMegaBytePerSecond => Ok(NumberUnit::MegaBytePerSecond),
1202            Unit::NumberGigaBytePerSecond => Ok(NumberUnit::GigaBytePerSecond),
1203            Unit::NumberKibiBytePerSecond => Ok(NumberUnit::KibiBytePerSecond),
1204            Unit::NumberMebiBytePerSecond => Ok(NumberUnit::MebiBytePerSecond),
1205            Unit::NumberGibiBytePerSecond => Ok(NumberUnit::GibiBytePerSecond),
1206            Unit::NumberKilogram => Ok(NumberUnit::Kilogram),
1207            Unit::NumberGram => Ok(NumberUnit::Gram),
1208            Unit::NumberMilligram => Ok(NumberUnit::Milligram),
1209            Unit::NumberMicrogram => Ok(NumberUnit::Microgram),
1210            Unit::NumberOunce => Ok(NumberUnit::Ounce),
1211            Unit::NumberPound => Ok(NumberUnit::Pound),
1212            Unit::NumberStone => Ok(NumberUnit::Stone),
1213            Unit::NumberPercentage => Ok(NumberUnit::Percentage),
1214            Unit::Other(other) => Ok(NumberUnit::Other(other)),
1215            _ => Err(UnitConversionError),
1216        }
1217    }
1218}