Skip to main content

kcl_lib/
unit_conversion.rs

1use kittycad_modeling_cmds::units as kcmcu;
2
3/// Converts a unit from kcl_api to its equivalent for kcmc.
4pub trait ToKcmc {
5    type Equivalent;
6    /// Converts this unit of measurement from kcl_api to its equivalent for kcmc.
7    fn to_kcmc(self) -> Self::Equivalent;
8}
9
10/// Converts a unit from kcmc to its equivalent for kcl_api.
11pub trait ToApi {
12    type Equivalent;
13    /// Converts this unit of measurement from kcmc to its equivalent for kcl_api.
14    fn to_api(self) -> Self::Equivalent;
15}
16
17impl ToKcmc for kcl_api::UnitLength {
18    type Equivalent = kcmcu::UnitLength;
19    fn to_kcmc(self) -> Self::Equivalent {
20        length::api_to_kcmc(self)
21    }
22}
23
24impl ToApi for kcmcu::UnitLength {
25    type Equivalent = kcl_api::UnitLength;
26    fn to_api(self) -> Self::Equivalent {
27        length::kcmc_to_api(self)
28    }
29}
30
31impl ToKcmc for kcl_api::UnitAngle {
32    type Equivalent = kcmcu::UnitAngle;
33    fn to_kcmc(self) -> Self::Equivalent {
34        angle::api_to_kcmc(self)
35    }
36}
37
38impl ToApi for kcmcu::UnitAngle {
39    type Equivalent = kcl_api::UnitAngle;
40    fn to_api(self) -> Self::Equivalent {
41        angle::kcmc_to_api(self)
42    }
43}
44
45impl ToKcmc for kcl_api::UnitMass {
46    type Equivalent = kcmcu::UnitMass;
47    fn to_kcmc(self) -> Self::Equivalent {
48        mass::api_to_kcmc(self)
49    }
50}
51
52impl ToApi for kcmcu::UnitMass {
53    type Equivalent = kcl_api::UnitMass;
54    fn to_api(self) -> Self::Equivalent {
55        mass::kcmc_to_api(self)
56    }
57}
58
59impl ToKcmc for kcl_api::UnitArea {
60    type Equivalent = kcmcu::UnitArea;
61    fn to_kcmc(self) -> Self::Equivalent {
62        area::api_to_kcmc(self)
63    }
64}
65
66impl ToApi for kcmcu::UnitArea {
67    type Equivalent = kcl_api::UnitArea;
68    fn to_api(self) -> Self::Equivalent {
69        area::kcmc_to_api(self)
70    }
71}
72
73impl ToKcmc for kcl_api::UnitDensity {
74    type Equivalent = kcmcu::UnitDensity;
75    fn to_kcmc(self) -> Self::Equivalent {
76        density::api_to_kcmc(self)
77    }
78}
79
80impl ToApi for kcmcu::UnitDensity {
81    type Equivalent = kcl_api::UnitDensity;
82    fn to_api(self) -> Self::Equivalent {
83        density::kcmc_to_api(self)
84    }
85}
86
87impl ToKcmc for kcl_api::UnitVolume {
88    type Equivalent = kcmcu::UnitVolume;
89    fn to_kcmc(self) -> Self::Equivalent {
90        volume::api_to_kcmc(self)
91    }
92}
93
94impl ToApi for kcmcu::UnitVolume {
95    type Equivalent = kcl_api::UnitVolume;
96    fn to_api(self) -> Self::Equivalent {
97        volume::kcmc_to_api(self)
98    }
99}
100
101mod length {
102    use kittycad_modeling_cmds::units::UnitLength;
103
104    pub fn kcmc_to_api(value: UnitLength) -> kcl_api::UnitLength {
105        match value {
106            UnitLength::Centimeters => kcl_api::UnitLength::Centimeters,
107            UnitLength::Feet => kcl_api::UnitLength::Feet,
108            UnitLength::Inches => kcl_api::UnitLength::Inches,
109            UnitLength::Meters => kcl_api::UnitLength::Meters,
110            UnitLength::Millimeters => kcl_api::UnitLength::Millimeters,
111            UnitLength::Yards => kcl_api::UnitLength::Yards,
112        }
113    }
114
115    pub fn api_to_kcmc(value: kcl_api::UnitLength) -> UnitLength {
116        match value {
117            kcl_api::UnitLength::Centimeters => UnitLength::Centimeters,
118            kcl_api::UnitLength::Feet => UnitLength::Feet,
119            kcl_api::UnitLength::Inches => UnitLength::Inches,
120            kcl_api::UnitLength::Meters => UnitLength::Meters,
121            kcl_api::UnitLength::Millimeters => UnitLength::Millimeters,
122            kcl_api::UnitLength::Yards => UnitLength::Yards,
123        }
124    }
125}
126
127mod volume {
128    use kittycad_modeling_cmds::units::UnitVolume;
129
130    pub fn kcmc_to_api(value: UnitVolume) -> kcl_api::UnitVolume {
131        match value {
132            UnitVolume::CubicMillimeters => kcl_api::UnitVolume::CubicMillimeters,
133            UnitVolume::CubicCentimeters => kcl_api::UnitVolume::CubicCentimeters,
134            UnitVolume::CubicFeet => kcl_api::UnitVolume::CubicFeet,
135            UnitVolume::CubicInches => kcl_api::UnitVolume::CubicInches,
136            UnitVolume::CubicMeters => kcl_api::UnitVolume::CubicMeters,
137            UnitVolume::CubicYards => kcl_api::UnitVolume::CubicYards,
138            UnitVolume::FluidOunces => kcl_api::UnitVolume::FluidOunces,
139            UnitVolume::Gallons => kcl_api::UnitVolume::Gallons,
140            UnitVolume::Liters => kcl_api::UnitVolume::Liters,
141            UnitVolume::Milliliters => kcl_api::UnitVolume::Milliliters,
142        }
143    }
144
145    pub fn api_to_kcmc(value: kcl_api::UnitVolume) -> UnitVolume {
146        match value {
147            kcl_api::UnitVolume::CubicMillimeters => UnitVolume::CubicMillimeters,
148            kcl_api::UnitVolume::CubicCentimeters => UnitVolume::CubicCentimeters,
149            kcl_api::UnitVolume::CubicFeet => UnitVolume::CubicFeet,
150            kcl_api::UnitVolume::CubicInches => UnitVolume::CubicInches,
151            kcl_api::UnitVolume::CubicMeters => UnitVolume::CubicMeters,
152            kcl_api::UnitVolume::CubicYards => UnitVolume::CubicYards,
153            kcl_api::UnitVolume::FluidOunces => UnitVolume::FluidOunces,
154            kcl_api::UnitVolume::Gallons => UnitVolume::Gallons,
155            kcl_api::UnitVolume::Liters => UnitVolume::Liters,
156            kcl_api::UnitVolume::Milliliters => UnitVolume::Milliliters,
157        }
158    }
159}
160
161mod mass {
162    use kittycad_modeling_cmds::units::UnitMass;
163
164    pub fn kcmc_to_api(value: UnitMass) -> kcl_api::UnitMass {
165        match value {
166            UnitMass::Grams => kcl_api::UnitMass::Grams,
167            UnitMass::Kilograms => kcl_api::UnitMass::Kilograms,
168            UnitMass::Pounds => kcl_api::UnitMass::Pounds,
169        }
170    }
171
172    pub fn api_to_kcmc(value: kcl_api::UnitMass) -> UnitMass {
173        match value {
174            kcl_api::UnitMass::Grams => UnitMass::Grams,
175            kcl_api::UnitMass::Kilograms => UnitMass::Kilograms,
176            kcl_api::UnitMass::Pounds => UnitMass::Pounds,
177        }
178    }
179}
180
181mod area {
182    use kittycad_modeling_cmds::units::UnitArea;
183
184    pub fn kcmc_to_api(value: UnitArea) -> kcl_api::UnitArea {
185        match value {
186            UnitArea::SquareCentimeters => kcl_api::UnitArea::SquareCentimeters,
187            UnitArea::SquareDecimeters => kcl_api::UnitArea::SquareDecimeters,
188            UnitArea::SquareFeet => kcl_api::UnitArea::SquareFeet,
189            UnitArea::SquareInches => kcl_api::UnitArea::SquareInches,
190            UnitArea::SquareKilometers => kcl_api::UnitArea::SquareKilometers,
191            UnitArea::SquareMeters => kcl_api::UnitArea::SquareMeters,
192            UnitArea::SquareMillimeters => kcl_api::UnitArea::SquareMillimeters,
193            UnitArea::SquareYards => kcl_api::UnitArea::SquareYards,
194        }
195    }
196
197    pub fn api_to_kcmc(value: kcl_api::UnitArea) -> UnitArea {
198        match value {
199            kcl_api::UnitArea::SquareCentimeters => UnitArea::SquareCentimeters,
200            kcl_api::UnitArea::SquareDecimeters => UnitArea::SquareDecimeters,
201            kcl_api::UnitArea::SquareFeet => UnitArea::SquareFeet,
202            kcl_api::UnitArea::SquareInches => UnitArea::SquareInches,
203            kcl_api::UnitArea::SquareKilometers => UnitArea::SquareKilometers,
204            kcl_api::UnitArea::SquareMeters => UnitArea::SquareMeters,
205            kcl_api::UnitArea::SquareMillimeters => UnitArea::SquareMillimeters,
206            kcl_api::UnitArea::SquareYards => UnitArea::SquareYards,
207        }
208    }
209}
210
211mod density {
212    use kittycad_modeling_cmds::units::UnitDensity;
213
214    pub fn kcmc_to_api(value: UnitDensity) -> kcl_api::UnitDensity {
215        match value {
216            UnitDensity::PoundsPerCubicFeet => kcl_api::UnitDensity::PoundsPerCubicFeet,
217            UnitDensity::KilogramsPerCubicMeter => kcl_api::UnitDensity::KilogramsPerCubicMeter,
218        }
219    }
220
221    pub fn api_to_kcmc(value: kcl_api::UnitDensity) -> UnitDensity {
222        match value {
223            kcl_api::UnitDensity::PoundsPerCubicFeet => UnitDensity::PoundsPerCubicFeet,
224            kcl_api::UnitDensity::KilogramsPerCubicMeter => UnitDensity::KilogramsPerCubicMeter,
225        }
226    }
227}
228
229mod angle {
230    use kittycad_modeling_cmds::units::UnitAngle;
231
232    pub fn kcmc_to_api(value: UnitAngle) -> kcl_api::UnitAngle {
233        match value {
234            UnitAngle::Degrees => kcl_api::UnitAngle::Degrees,
235            UnitAngle::Radians => kcl_api::UnitAngle::Radians,
236        }
237    }
238
239    pub fn api_to_kcmc(value: kcl_api::UnitAngle) -> UnitAngle {
240        match value {
241            kcl_api::UnitAngle::Degrees => UnitAngle::Degrees,
242            kcl_api::UnitAngle::Radians => UnitAngle::Radians,
243        }
244    }
245}