1pub mod appearance;
4pub mod args;
5pub mod array;
6pub mod assert;
7pub mod axis_or_reference;
8pub mod chamfer;
9pub mod clone;
10pub mod constraints;
11pub mod csg;
12pub mod edge;
13pub mod extrude;
14pub mod faces;
15pub mod fillet;
16pub mod gdt;
17pub mod helix;
18pub mod loft;
19pub mod math;
20pub mod mirror;
21pub mod patterns;
22pub mod planes;
23pub mod revolve;
24pub mod runtime;
25pub mod segment;
26pub mod shapes;
27pub mod shell;
28pub mod sketch;
29pub(crate) mod sketch2;
30pub mod surfaces;
31pub mod sweep;
32pub mod transform;
33pub mod utils;
34
35use anyhow::Result;
36pub use args::Args;
37use futures::future::FutureExt;
38
39use crate::{
40 errors::KclError,
41 execution::{ExecState, KclValue, KclValueControlFlow, types::PrimitiveType},
42};
43
44pub type StdFn =
45 fn(
46 &mut ExecState,
47 Args,
48 ) -> std::pin::Pin<Box<dyn std::future::Future<Output = Result<KclValueControlFlow, KclError>> + Send + '_>>;
49
50#[derive(Clone, Debug, PartialEq, Eq)]
51pub struct StdFnProps {
52 pub name: String,
53}
54
55impl StdFnProps {
56 fn default(name: &str) -> Self {
57 Self { name: name.to_owned() }
58 }
59}
60
61pub(crate) fn std_fn(path: &str, fn_name: &str) -> (crate::std::StdFn, StdFnProps) {
62 match (path, fn_name) {
63 ("gdt", "datum") => (
64 |e, a| Box::pin(crate::std::gdt::datum(e, a).map(|r| r.map(KclValue::continue_))),
65 StdFnProps::default("std::gdt::datum"),
66 ),
67 ("gdt", "flatness") => (
68 |e, a| Box::pin(crate::std::gdt::flatness(e, a).map(|r| r.map(KclValue::continue_))),
69 StdFnProps::default("std::gdt::flatness"),
70 ),
71 ("math", "cos") => (
72 |e, a| Box::pin(crate::std::math::cos(e, a).map(|r| r.map(KclValue::continue_))),
73 StdFnProps::default("std::math::cos"),
74 ),
75 ("math", "sin") => (
76 |e, a| Box::pin(crate::std::math::sin(e, a).map(|r| r.map(KclValue::continue_))),
77 StdFnProps::default("std::math::sin"),
78 ),
79 ("math", "tan") => (
80 |e, a| Box::pin(crate::std::math::tan(e, a).map(|r| r.map(KclValue::continue_))),
81 StdFnProps::default("std::math::tan"),
82 ),
83 ("math", "acos") => (
84 |e, a| Box::pin(crate::std::math::acos(e, a).map(|r| r.map(KclValue::continue_))),
85 StdFnProps::default("std::math::acos"),
86 ),
87 ("math", "asin") => (
88 |e, a| Box::pin(crate::std::math::asin(e, a).map(|r| r.map(KclValue::continue_))),
89 StdFnProps::default("std::math::asin"),
90 ),
91 ("math", "atan") => (
92 |e, a| Box::pin(crate::std::math::atan(e, a).map(|r| r.map(KclValue::continue_))),
93 StdFnProps::default("std::math::atan"),
94 ),
95 ("math", "atan2") => (
96 |e, a| Box::pin(crate::std::math::atan2(e, a).map(|r| r.map(KclValue::continue_))),
97 StdFnProps::default("std::math::atan2"),
98 ),
99 ("math", "sqrt") => (
100 |e, a| Box::pin(crate::std::math::sqrt(e, a).map(|r| r.map(KclValue::continue_))),
101 StdFnProps::default("std::math::sqrt"),
102 ),
103
104 ("math", "abs") => (
105 |e, a| Box::pin(crate::std::math::abs(e, a).map(|r| r.map(KclValue::continue_))),
106 StdFnProps::default("std::math::abs"),
107 ),
108 ("math", "rem") => (
109 |e, a| Box::pin(crate::std::math::rem(e, a).map(|r| r.map(KclValue::continue_))),
110 StdFnProps::default("std::math::rem"),
111 ),
112 ("math", "round") => (
113 |e, a| Box::pin(crate::std::math::round(e, a).map(|r| r.map(KclValue::continue_))),
114 StdFnProps::default("std::math::round"),
115 ),
116 ("math", "floor") => (
117 |e, a| Box::pin(crate::std::math::floor(e, a).map(|r| r.map(KclValue::continue_))),
118 StdFnProps::default("std::math::floor"),
119 ),
120 ("math", "ceil") => (
121 |e, a| Box::pin(crate::std::math::ceil(e, a).map(|r| r.map(KclValue::continue_))),
122 StdFnProps::default("std::math::ceil"),
123 ),
124 ("math", "min") => (
125 |e, a| Box::pin(crate::std::math::min(e, a).map(|r| r.map(KclValue::continue_))),
126 StdFnProps::default("std::math::min"),
127 ),
128 ("math", "max") => (
129 |e, a| Box::pin(crate::std::math::max(e, a).map(|r| r.map(KclValue::continue_))),
130 StdFnProps::default("std::math::max"),
131 ),
132 ("math", "pow") => (
133 |e, a| Box::pin(crate::std::math::pow(e, a).map(|r| r.map(KclValue::continue_))),
134 StdFnProps::default("std::math::pow"),
135 ),
136 ("math", "log") => (
137 |e, a| Box::pin(crate::std::math::log(e, a).map(|r| r.map(KclValue::continue_))),
138 StdFnProps::default("std::math::log"),
139 ),
140 ("math", "log2") => (
141 |e, a| Box::pin(crate::std::math::log2(e, a).map(|r| r.map(KclValue::continue_))),
142 StdFnProps::default("std::math::log2"),
143 ),
144 ("math", "log10") => (
145 |e, a| Box::pin(crate::std::math::log10(e, a).map(|r| r.map(KclValue::continue_))),
146 StdFnProps::default("std::math::log10"),
147 ),
148 ("math", "ln") => (
149 |e, a| Box::pin(crate::std::math::ln(e, a).map(|r| r.map(KclValue::continue_))),
150 StdFnProps::default("std::math::ln"),
151 ),
152 ("math", "legLen") => (
153 |e, a| Box::pin(crate::std::math::leg_length(e, a).map(|r| r.map(KclValue::continue_))),
154 StdFnProps::default("std::math::legLen"),
155 ),
156 ("math", "legAngX") => (
157 |e, a| Box::pin(crate::std::math::leg_angle_x(e, a).map(|r| r.map(KclValue::continue_))),
158 StdFnProps::default("std::math::legAngX"),
159 ),
160 ("math", "legAngY") => (
161 |e, a| Box::pin(crate::std::math::leg_angle_y(e, a).map(|r| r.map(KclValue::continue_))),
162 StdFnProps::default("std::math::legAngY"),
163 ),
164 ("sketch", "circle") => (
165 |e, a| Box::pin(crate::std::shapes::circle(e, a).map(|r| r.map(KclValue::continue_))),
166 StdFnProps::default("std::sketch::circle"),
167 ),
168 ("sketch", "ellipse") => (
169 |e, a| Box::pin(crate::std::shapes::ellipse(e, a).map(|r| r.map(KclValue::continue_))),
170 StdFnProps::default("std::sketch::ellipse"),
171 ),
172 ("prelude", "helix") => (
173 |e, a| Box::pin(crate::std::helix::helix(e, a).map(|r| r.map(KclValue::continue_))),
174 StdFnProps::default("std::helix"),
175 ),
176 ("transform", "mirror2d") => (
177 |e, a| Box::pin(crate::std::mirror::mirror_2d(e, a).map(|r| r.map(KclValue::continue_))),
178 StdFnProps::default("std::transform::mirror2d"),
179 ),
180 ("transform", "translate") => (
181 |e, a| Box::pin(crate::std::transform::translate(e, a).map(|r| r.map(KclValue::continue_))),
182 StdFnProps::default("std::transform::translate"),
183 ),
184 ("transform", "rotate") => (
185 |e, a| Box::pin(crate::std::transform::rotate(e, a).map(|r| r.map(KclValue::continue_))),
186 StdFnProps::default("std::transform::rotate"),
187 ),
188 ("transform", "scale") => (
189 |e, a| Box::pin(crate::std::transform::scale(e, a).map(|r| r.map(KclValue::continue_))),
190 StdFnProps::default("std::transform::scale"),
191 ),
192 ("transform", "hide") => (
193 |e, a| Box::pin(crate::std::transform::hide(e, a).map(|r| r.map(KclValue::continue_))),
194 StdFnProps::default("std::transform::hide"),
195 ),
196 ("prelude", "offsetPlane") => (
197 |e, a| Box::pin(crate::std::planes::offset_plane(e, a).map(|r| r.map(KclValue::continue_))),
198 StdFnProps::default("std::offsetPlane"),
199 ),
200 ("prelude", "assert") => (
201 |e, a| Box::pin(crate::std::assert::assert(e, a).map(|r| r.map(KclValue::continue_))),
202 StdFnProps::default("std::assert"),
203 ),
204 ("prelude", "assertIs") => (
205 |e, a| Box::pin(crate::std::assert::assert_is(e, a).map(|r| r.map(KclValue::continue_))),
206 StdFnProps::default("std::assertIs"),
207 ),
208 ("runtime", "exit") => (
209 |e, a| Box::pin(crate::std::runtime::exit(e, a)),
210 StdFnProps::default("std::runtime::exit"),
211 ),
212 ("solid", "fillet") => (
213 |e, a| Box::pin(crate::std::fillet::fillet(e, a).map(|r| r.map(KclValue::continue_))),
214 StdFnProps::default("std::solid::fillet"),
215 ),
216 ("solid", "chamfer") => (
217 |e, a| Box::pin(crate::std::chamfer::chamfer(e, a).map(|r| r.map(KclValue::continue_))),
218 StdFnProps::default("std::solid::chamfer"),
219 ),
220 ("solid", "shell") => (
221 |e, a| Box::pin(crate::std::shell::shell(e, a).map(|r| r.map(KclValue::continue_))),
222 StdFnProps::default("std::solid::shell"),
223 ),
224 ("solid", "hollow") => (
225 |e, a| Box::pin(crate::std::shell::hollow(e, a).map(|r| r.map(KclValue::continue_))),
226 StdFnProps::default("std::solid::hollow"),
227 ),
228 ("solid", "union") => (
229 |e, a| Box::pin(crate::std::csg::union(e, a).map(|r| r.map(KclValue::continue_))),
230 StdFnProps::default("std::solid::union"),
231 ),
232 ("solid", "intersect") => (
233 |e, a| Box::pin(crate::std::csg::intersect(e, a).map(|r| r.map(KclValue::continue_))),
234 StdFnProps::default("std::solid::intersect"),
235 ),
236 ("solid", "subtract") => (
237 |e, a| Box::pin(crate::std::csg::subtract(e, a).map(|r| r.map(KclValue::continue_))),
238 StdFnProps::default("std::solid::subtract"),
239 ),
240 ("solid", "patternTransform") => (
241 |e, a| Box::pin(crate::std::patterns::pattern_transform(e, a).map(|r| r.map(KclValue::continue_))),
242 StdFnProps::default("std::solid::patternTransform"),
243 ),
244 ("solid", "patternLinear3d") => (
245 |e, a| Box::pin(crate::std::patterns::pattern_linear_3d(e, a).map(|r| r.map(KclValue::continue_))),
246 StdFnProps::default("std::solid::patternLinear3d"),
247 ),
248 ("solid", "patternCircular3d") => (
249 |e, a| Box::pin(crate::std::patterns::pattern_circular_3d(e, a).map(|r| r.map(KclValue::continue_))),
250 StdFnProps::default("std::solid::patternCircular3d"),
251 ),
252 ("solid", "appearance") => (
253 |e, a| Box::pin(crate::std::appearance::appearance(e, a).map(|r| r.map(KclValue::continue_))),
254 StdFnProps::default("std::solid::appearance"),
255 ),
256 ("solid", "flipSurface") => (
257 |e, a| Box::pin(crate::std::surfaces::flip_surface(e, a).map(|r| r.map(KclValue::continue_))),
258 StdFnProps::default("std::solid::flipSurface"),
259 ),
260 ("solid", "split") => (
261 |e, a| Box::pin(crate::std::csg::split(e, a).map(|r| r.map(KclValue::continue_))),
262 StdFnProps::default("std::solid::split"),
263 ),
264 ("array", "map") => (
265 |e, a| Box::pin(crate::std::array::map(e, a).map(|r| r.map(KclValue::continue_))),
266 StdFnProps::default("std::array::map"),
267 ),
268 ("array", "reduce") => (
269 |e, a| Box::pin(crate::std::array::reduce(e, a).map(|r| r.map(KclValue::continue_))),
270 StdFnProps::default("std::array::reduce"),
271 ),
272 ("array", "push") => (
273 |e, a| Box::pin(crate::std::array::push(e, a).map(|r| r.map(KclValue::continue_))),
274 StdFnProps::default("std::array::push"),
275 ),
276 ("array", "pop") => (
277 |e, a| Box::pin(crate::std::array::pop(e, a).map(|r| r.map(KclValue::continue_))),
278 StdFnProps::default("std::array::pop"),
279 ),
280 ("array", "concat") => (
281 |e, a| Box::pin(crate::std::array::concat(e, a).map(|r| r.map(KclValue::continue_))),
282 StdFnProps::default("std::array::concat"),
283 ),
284 ("array", "flatten") => (
285 |e, a| Box::pin(crate::std::array::flatten(e, a).map(|r| r.map(KclValue::continue_))),
286 StdFnProps::default("std::array::flatten"),
287 ),
288 ("prelude", "clone") => (
289 |e, a| Box::pin(crate::std::clone::clone(e, a).map(|r| r.map(KclValue::continue_))),
290 StdFnProps::default("std::clone"),
291 ),
292 ("sketch", "conic") => (
293 |e, a| Box::pin(crate::std::sketch::conic(e, a).map(|r| r.map(KclValue::continue_))),
294 StdFnProps::default("std::sketch::conic"),
295 ),
296 ("sketch", "parabolic") => (
297 |e, a| Box::pin(crate::std::sketch::parabolic(e, a).map(|r| r.map(KclValue::continue_))),
298 StdFnProps::default("std::sketch::parabolic"),
299 ),
300 ("sketch", "parabolicPoint") => (
301 |e, a| Box::pin(crate::std::sketch::parabolic_point(e, a).map(|r| r.map(KclValue::continue_))),
302 StdFnProps::default("std::sketch::parabolicPoint"),
303 ),
304 ("sketch", "hyperbolic") => (
305 |e, a| Box::pin(crate::std::sketch::hyperbolic(e, a).map(|r| r.map(KclValue::continue_))),
306 StdFnProps::default("std::sketch::hyperbolic"),
307 ),
308 ("sketch", "hyperbolicPoint") => (
309 |e, a| Box::pin(crate::std::sketch::hyperbolic_point(e, a).map(|r| r.map(KclValue::continue_))),
310 StdFnProps::default("std::sketch::hyperbolicPoint"),
311 ),
312 ("sketch", "elliptic") => (
313 |e, a| Box::pin(crate::std::sketch::elliptic(e, a).map(|r| r.map(KclValue::continue_))),
314 StdFnProps::default("std::sketch::elliptic"),
315 ),
316 ("sketch", "ellipticPoint") => (
317 |e, a| Box::pin(crate::std::sketch::elliptic_point(e, a).map(|r| r.map(KclValue::continue_))),
318 StdFnProps::default("std::sketch::ellipticPoint"),
319 ),
320 ("sketch", "rectangle") => (
321 |e, a| Box::pin(crate::std::shapes::rectangle(e, a).map(|r| r.map(KclValue::continue_))),
322 StdFnProps::default("std::sketch::rectangle"),
323 ),
324 ("sketch", "planeOf") => (
325 |e, a| Box::pin(crate::std::planes::plane_of(e, a).map(|r| r.map(KclValue::continue_))),
326 StdFnProps::default("std::sketch::planeOf"),
327 ),
328 ("sketch", "faceOf") => (
329 |e, a| Box::pin(crate::std::faces::face_of(e, a).map(|r| r.map(KclValue::continue_))),
330 StdFnProps::default("std::sketch::faceOf"),
331 ),
332 ("sketch", "extrude") => (
333 |e, a| Box::pin(crate::std::extrude::extrude(e, a).map(|r| r.map(KclValue::continue_))),
334 StdFnProps::default("std::sketch::extrude"),
335 ),
336 ("sketch", "patternTransform2d") => (
337 |e, a| Box::pin(crate::std::patterns::pattern_transform_2d(e, a).map(|r| r.map(KclValue::continue_))),
338 StdFnProps::default("std::sketch::patternTransform2d"),
339 ),
340 ("sketch", "revolve") => (
341 |e, a| Box::pin(crate::std::revolve::revolve(e, a).map(|r| r.map(KclValue::continue_))),
342 StdFnProps::default("std::sketch::revolve"),
343 ),
344 ("sketch", "sweep") => (
345 |e, a| Box::pin(crate::std::sweep::sweep(e, a).map(|r| r.map(KclValue::continue_))),
346 StdFnProps::default("std::sketch::sweep"),
347 ),
348 ("sketch", "loft") => (
349 |e, a| Box::pin(crate::std::loft::loft(e, a).map(|r| r.map(KclValue::continue_))),
350 StdFnProps::default("std::sketch::loft"),
351 ),
352 ("sketch", "polygon") => (
353 |e, a| Box::pin(crate::std::shapes::polygon(e, a).map(|r| r.map(KclValue::continue_))),
354 StdFnProps::default("std::sketch::polygon"),
355 ),
356 ("sketch", "circleThreePoint") => (
357 |e, a| Box::pin(crate::std::shapes::circle_three_point(e, a).map(|r| r.map(KclValue::continue_))),
358 StdFnProps::default("std::sketch::circleThreePoint"),
359 ),
360 ("sketch", "getCommonEdge") => (
361 |e, a| Box::pin(crate::std::edge::get_common_edge(e, a).map(|r| r.map(KclValue::continue_))),
362 StdFnProps::default("std::sketch::getCommonEdge"),
363 ),
364 ("sketch", "getNextAdjacentEdge") => (
365 |e, a| Box::pin(crate::std::edge::get_next_adjacent_edge(e, a).map(|r| r.map(KclValue::continue_))),
366 StdFnProps::default("std::sketch::getNextAdjacentEdge"),
367 ),
368 ("sketch", "getOppositeEdge") => (
369 |e, a| Box::pin(crate::std::edge::get_opposite_edge(e, a).map(|r| r.map(KclValue::continue_))),
370 StdFnProps::default("std::sketch::getOppositeEdge"),
371 ),
372 ("sketch", "getPreviousAdjacentEdge") => (
373 |e, a| Box::pin(crate::std::edge::get_previous_adjacent_edge(e, a).map(|r| r.map(KclValue::continue_))),
374 StdFnProps::default("std::sketch::getPreviousAdjacentEdge"),
375 ),
376 ("sketch", "patternLinear2d") => (
377 |e, a| Box::pin(crate::std::patterns::pattern_linear_2d(e, a).map(|r| r.map(KclValue::continue_))),
378 StdFnProps::default("std::sketch::patternLinear2d"),
379 ),
380 ("sketch", "patternCircular2d") => (
381 |e, a| Box::pin(crate::std::patterns::pattern_circular_2d(e, a).map(|r| r.map(KclValue::continue_))),
382 StdFnProps::default("std::sketch::patternCircular2d"),
383 ),
384 ("sketch", "segEnd") => (
385 |e, a| Box::pin(crate::std::segment::segment_end(e, a).map(|r| r.map(KclValue::continue_))),
386 StdFnProps::default("std::sketch::segEnd"),
387 ),
388 ("sketch", "segEndX") => (
389 |e, a| Box::pin(crate::std::segment::segment_end_x(e, a).map(|r| r.map(KclValue::continue_))),
390 StdFnProps::default("std::sketch::segEndX"),
391 ),
392 ("sketch", "segEndY") => (
393 |e, a| Box::pin(crate::std::segment::segment_end_y(e, a).map(|r| r.map(KclValue::continue_))),
394 StdFnProps::default("std::sketch::segEndY"),
395 ),
396 ("sketch", "segStart") => (
397 |e, a| Box::pin(crate::std::segment::segment_start(e, a).map(|r| r.map(KclValue::continue_))),
398 StdFnProps::default("std::sketch::segStart"),
399 ),
400 ("sketch", "segStartX") => (
401 |e, a| Box::pin(crate::std::segment::segment_start_x(e, a).map(|r| r.map(KclValue::continue_))),
402 StdFnProps::default("std::sketch::segStartX"),
403 ),
404 ("sketch", "segStartY") => (
405 |e, a| Box::pin(crate::std::segment::segment_start_y(e, a).map(|r| r.map(KclValue::continue_))),
406 StdFnProps::default("std::sketch::segStartY"),
407 ),
408 ("sketch", "lastSegX") => (
409 |e, a| Box::pin(crate::std::segment::last_segment_x(e, a).map(|r| r.map(KclValue::continue_))),
410 StdFnProps::default("std::sketch::lastSegX"),
411 ),
412 ("sketch", "lastSegY") => (
413 |e, a| Box::pin(crate::std::segment::last_segment_y(e, a).map(|r| r.map(KclValue::continue_))),
414 StdFnProps::default("std::sketch::lastSegY"),
415 ),
416 ("sketch", "segLen") => (
417 |e, a| Box::pin(crate::std::segment::segment_length(e, a).map(|r| r.map(KclValue::continue_))),
418 StdFnProps::default("std::sketch::segLen"),
419 ),
420 ("sketch", "segAng") => (
421 |e, a| Box::pin(crate::std::segment::segment_angle(e, a).map(|r| r.map(KclValue::continue_))),
422 StdFnProps::default("std::sketch::segAng"),
423 ),
424 ("sketch", "tangentToEnd") => (
425 |e, a| Box::pin(crate::std::segment::tangent_to_end(e, a).map(|r| r.map(KclValue::continue_))),
426 StdFnProps::default("std::sketch::tangentToEnd"),
427 ),
428 ("sketch", "profileStart") => (
429 |e, a| Box::pin(crate::std::sketch::profile_start(e, a).map(|r| r.map(KclValue::continue_))),
430 StdFnProps::default("std::sketch::profileStart"),
431 ),
432 ("sketch", "profileStartX") => (
433 |e, a| Box::pin(crate::std::sketch::profile_start_x(e, a).map(|r| r.map(KclValue::continue_))),
434 StdFnProps::default("std::sketch::profileStartX"),
435 ),
436 ("sketch", "profileStartY") => (
437 |e, a| Box::pin(crate::std::sketch::profile_start_y(e, a).map(|r| r.map(KclValue::continue_))),
438 StdFnProps::default("std::sketch::profileStartY"),
439 ),
440 ("sketch", "startSketchOn") => (
441 |e, a| Box::pin(crate::std::sketch::start_sketch_on(e, a).map(|r| r.map(KclValue::continue_))),
442 StdFnProps::default("std::sketch::startSketchOn"),
443 ),
444 ("sketch", "startProfile") => (
445 |e, a| Box::pin(crate::std::sketch::start_profile(e, a).map(|r| r.map(KclValue::continue_))),
446 StdFnProps::default("std::sketch::startProfile"),
447 ),
448 ("sketch", "involuteCircular") => (
449 |e, a| Box::pin(crate::std::sketch::involute_circular(e, a).map(|r| r.map(KclValue::continue_))),
450 StdFnProps::default("std::sketch::involuteCircular"),
451 ),
452 ("sketch", "line") => (
453 |e, a| Box::pin(crate::std::sketch::line(e, a).map(|r| r.map(KclValue::continue_))),
454 StdFnProps::default("std::sketch::line"),
455 ),
456 ("sketch", "xLine") => (
457 |e, a| Box::pin(crate::std::sketch::x_line(e, a).map(|r| r.map(KclValue::continue_))),
458 StdFnProps::default("std::sketch::xLine"),
459 ),
460 ("sketch", "yLine") => (
461 |e, a| Box::pin(crate::std::sketch::y_line(e, a).map(|r| r.map(KclValue::continue_))),
462 StdFnProps::default("std::sketch::yLine"),
463 ),
464 ("sketch", "angledLine") => (
465 |e, a| Box::pin(crate::std::sketch::angled_line(e, a).map(|r| r.map(KclValue::continue_))),
466 StdFnProps::default("std::sketch::angledLine"),
467 ),
468 ("sketch", "angledLineThatIntersects") => (
469 |e, a| Box::pin(crate::std::sketch::angled_line_that_intersects(e, a).map(|r| r.map(KclValue::continue_))),
470 StdFnProps::default("std::sketch::angledLineThatIntersects"),
471 ),
472 ("sketch", "close") => (
473 |e, a| Box::pin(crate::std::sketch::close(e, a).map(|r| r.map(KclValue::continue_))),
474 StdFnProps::default("std::sketch::close"),
475 ),
476 ("sketch", "arc") => (
477 |e, a| Box::pin(crate::std::sketch::arc(e, a).map(|r| r.map(KclValue::continue_))),
478 StdFnProps::default("std::sketch::arc"),
479 ),
480 ("sketch", "tangentialArc") => (
481 |e, a| Box::pin(crate::std::sketch::tangential_arc(e, a).map(|r| r.map(KclValue::continue_))),
482 StdFnProps::default("std::sketch::tangentialArc"),
483 ),
484 ("sketch", "bezierCurve") => (
485 |e, a| Box::pin(crate::std::sketch::bezier_curve(e, a).map(|r| r.map(KclValue::continue_))),
486 StdFnProps::default("std::sketch::bezierCurve"),
487 ),
488 ("sketch", "subtract2d") => (
489 |e, a| Box::pin(crate::std::sketch::subtract_2d(e, a).map(|r| r.map(KclValue::continue_))),
490 StdFnProps::default("std::sketch::subtract2d"),
491 ),
492 ("appearance", "hexString") => (
493 |e, a| Box::pin(crate::std::appearance::hex_string(e, a).map(|r| r.map(KclValue::continue_))),
494 StdFnProps::default("std::appearance::hexString"),
495 ),
496 ("sketch2", "point") => (
497 |e, a| Box::pin(crate::std::constraints::point(e, a).map(|r| r.map(KclValue::continue_))),
498 StdFnProps::default("std::sketch2::point"),
499 ),
500 ("sketch2", "line") => (
501 |e, a| Box::pin(crate::std::constraints::line(e, a).map(|r| r.map(KclValue::continue_))),
502 StdFnProps::default("std::sketch2::line"),
503 ),
504 ("sketch2", "arc") => (
505 |e, a| Box::pin(crate::std::constraints::arc(e, a).map(|r| r.map(KclValue::continue_))),
506 StdFnProps::default("std::sketch2::arc"),
507 ),
508 ("sketch2", "coincident") => (
509 |e, a| Box::pin(crate::std::constraints::coincident(e, a).map(|r| r.map(KclValue::continue_))),
510 StdFnProps::default("std::sketch2::coincident"),
511 ),
512 ("sketch2", "distance") => (
513 |e, a| Box::pin(crate::std::constraints::distance(e, a).map(|r| r.map(KclValue::continue_))),
514 StdFnProps::default("std::sketch2::distance"),
515 ),
516 ("sketch2", "radius") => (
517 |e, a| Box::pin(crate::std::constraints::radius(e, a).map(|r| r.map(KclValue::continue_))),
518 StdFnProps::default("std::sketch2::radius"),
519 ),
520 ("sketch2", "diameter") => (
521 |e, a| Box::pin(crate::std::constraints::diameter(e, a).map(|r| r.map(KclValue::continue_))),
522 StdFnProps::default("std::sketch2::diameter"),
523 ),
524 ("sketch2", "horizontalDistance") => (
525 |e, a| Box::pin(crate::std::constraints::horizontal_distance(e, a).map(|r| r.map(KclValue::continue_))),
526 StdFnProps::default("std::sketch2::horizontalDistance"),
527 ),
528 ("sketch2", "verticalDistance") => (
529 |e, a| Box::pin(crate::std::constraints::vertical_distance(e, a).map(|r| r.map(KclValue::continue_))),
530 StdFnProps::default("std::sketch2::verticalDistance"),
531 ),
532 ("sketch2", "equalLength") => (
533 |e, a| Box::pin(crate::std::constraints::equal_length(e, a).map(|r| r.map(KclValue::continue_))),
534 StdFnProps::default("std::sketch2::equalLength"),
535 ),
536 ("sketch2", "horizontal") => (
537 |e, a| Box::pin(crate::std::constraints::horizontal(e, a).map(|r| r.map(KclValue::continue_))),
538 StdFnProps::default("std::sketch2::horizontal"),
539 ),
540 ("sketch2", "parallel") => (
541 |e, a| Box::pin(crate::std::constraints::parallel(e, a).map(|r| r.map(KclValue::continue_))),
542 StdFnProps::default("std::sketch2::parallel"),
543 ),
544 ("sketch2", "perpendicular") => (
545 |e, a| Box::pin(crate::std::constraints::perpendicular(e, a).map(|r| r.map(KclValue::continue_))),
546 StdFnProps::default("std::sketch2::perpendicular"),
547 ),
548 ("sketch2", "vertical") => (
549 |e, a| Box::pin(crate::std::constraints::vertical(e, a).map(|r| r.map(KclValue::continue_))),
550 StdFnProps::default("std::sketch2::vertical"),
551 ),
552 ("solid", "isSurface") => (
553 |e, a| Box::pin(crate::std::surfaces::is_surface(e, a).map(|r| r.map(KclValue::continue_))),
554 StdFnProps::default("std::solid::isSurface"),
555 ),
556 ("solid", "isSolid") => (
557 |e, a| Box::pin(crate::std::surfaces::is_solid(e, a).map(|r| r.map(KclValue::continue_))),
558 StdFnProps::default("std::solid::isSolid"),
559 ),
560 ("solid", "deleteFace") => (
561 |e, a| Box::pin(crate::std::surfaces::delete_face(e, a).map(|r| r.map(KclValue::continue_))),
562 StdFnProps::default("std::solid::deleteFace"),
563 ),
564 (module, fn_name) => {
565 panic!("No implementation found for {module}::{fn_name}, please add it to this big match statement")
566 }
567 }
568}
569
570pub(crate) fn std_ty(path: &str, fn_name: &str) -> (PrimitiveType, StdFnProps) {
571 match (path, fn_name) {
572 ("types", "Segment") => (PrimitiveType::Segment, StdFnProps::default("std::types::Segment")),
573 ("types", "Sketch") => (PrimitiveType::Sketch, StdFnProps::default("std::types::Sketch")),
574 ("types", "Solid") => (PrimitiveType::Solid, StdFnProps::default("std::types::Solid")),
575 ("types", "Plane") => (PrimitiveType::Plane, StdFnProps::default("std::types::Plane")),
576 ("types", "Face") => (PrimitiveType::Face, StdFnProps::default("std::types::Face")),
577 ("types", "GdtAnnotation") => (
578 PrimitiveType::GdtAnnotation,
579 StdFnProps::default("std::types::GdtAnnotation"),
580 ),
581 ("types", "Helix") => (PrimitiveType::Helix, StdFnProps::default("std::types::Helix")),
582 ("types", "Edge") => (PrimitiveType::Edge, StdFnProps::default("std::types::Edge")),
583 ("types", "Axis2d") => (PrimitiveType::Axis2d, StdFnProps::default("std::types::Axis2d")),
584 ("types", "Axis3d") => (PrimitiveType::Axis3d, StdFnProps::default("std::types::Axis3d")),
585 ("types", "TaggedEdge") => (PrimitiveType::TaggedEdge, StdFnProps::default("std::types::TaggedEdge")),
586 ("types", "TaggedFace") => (PrimitiveType::TaggedFace, StdFnProps::default("std::types::TaggedFace")),
587 _ => unreachable!(),
588 }
589}
590
591const DEFAULT_TOLERANCE_MM: f64 = 0.0000001;
593
594#[allow(clippy::excessive_precision)]
597const EQUAL_POINTS_DIST_EPSILON: f64 = 2.3283064365386962890625e-10;