kittycad_modeling_cmds/format/
stl.rs1use parse_display::{Display, FromStr};
2use schemars::JsonSchema;
3use serde::{Deserialize, Serialize};
4
5use crate::{coord, format::Selection, units::UnitLength};
6
7pub mod import {
9 use super::*;
10
11 #[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, JsonSchema, Display, FromStr)]
13 #[display("coords: {coords}, units: {units}")]
14 #[serde(rename = "StlImportOptions")]
15 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
16 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
17 pub struct Options {
18 pub coords: coord::System,
24 pub units: UnitLength,
31 }
32
33 impl Default for Options {
34 fn default() -> Self {
35 Self {
36 coords: *coord::KITTYCAD,
37 units: UnitLength::Millimeters,
38 }
39 }
40 }
41}
42
43pub mod export {
45
46 use super::*;
47
48 #[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize, JsonSchema, Display, FromStr)]
50 #[display("coords: {coords}, selection: {selection}, storage: {storage}, units: {units}")]
51 #[serde(rename = "StlExportOptions")]
52 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
53 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
54 pub struct Options {
55 pub coords: coord::System,
61
62 pub selection: Selection,
64
65 pub storage: Storage,
67
68 pub units: UnitLength,
72 }
73
74 impl Default for Options {
75 fn default() -> Self {
76 Self {
77 coords: *coord::KITTYCAD,
78 selection: Default::default(),
79 storage: Default::default(),
80 units: UnitLength::Millimeters,
81 }
82 }
83 }
84
85 #[derive(
87 Clone, Copy, Debug, Default, Deserialize, Display, Eq, FromStr, Hash, JsonSchema, PartialEq, Serialize,
88 )]
89 #[display(style = "snake_case")]
90 #[serde(rename = "StlStorage", rename_all = "snake_case")]
91 #[cfg_attr(feature = "ts-rs", derive(ts_rs::TS))]
92 #[cfg_attr(feature = "ts-rs", ts(export_to = "ModelingCmd.ts"))]
93 pub enum Storage {
94 Ascii,
96
97 #[default]
101 Binary,
102 }
103}