kcl_lib/
unit_conversion.rs1use kittycad_modeling_cmds::units as kcmcu;
2
3pub trait ToKcmc {
5 type Equivalent;
6 fn to_kcmc(self) -> Self::Equivalent;
8}
9
10pub trait ToApi {
12 type Equivalent;
13 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}