1use serde::{Serialize, Deserialize};
15
16#[derive(Debug, Clone, Serialize, Deserialize)]
18pub struct Pathjson {
19 pub bins: Vec<Bin>,
21
22 #[serde(skip_serializing_if = "Option::is_none")]
24 pub cost: Option<Cost>,
25
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub cut_sheet: Option<bool>,
29
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub finish: Option<Finish>,
33
34 pub material: Material,
36
37 #[serde(skip_serializing_if = "Option::is_none")]
39 pub mill: Option<f64>,
40
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub nest_bbox: Option<bool>,
44
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub nesting: Option<bool>,
48
49 #[serde(skip_serializing_if = "Option::is_none")]
51 pub paint: Option<Paint>,
52
53 pub paths: Vec<Path>,
55
56 pub plugin: Plugin,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub screw: Option<bool>,
61
62 #[serde(skip_serializing_if = "Option::is_none")]
64 pub screws: Option<Vec<Screw>>,
65
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub tab: Option<bool>,
69
70 pub thickness: f64,
72}
73
74#[derive(Debug, Clone, Serialize, Deserialize)]
75pub struct Bin {
76 pub depth: f64,
78
79 pub width: f64,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct Cost {
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub cutting_cost_per_hour: Option<f64>,
89}
90
91#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct Finish {
94 pub burr: bool,
96
97 pub sanding: bool,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize)]
103pub struct Material {
104 #[serde(skip_serializing_if = "Option::is_none")]
106 pub allowance: Option<f64>,
107
108 #[serde(skip_serializing_if = "Option::is_none")]
110 pub jog_speed: Option<f64>,
111
112 #[serde(skip_serializing_if = "Option::is_none")]
114 pub mill_ara: Option<f64>,
115
116 #[serde(skip_serializing_if = "Option::is_none")]
118 pub mill_shiage: Option<f64>,
119
120 #[serde(skip_serializing_if = "Option::is_none")]
122 pub path_height: Option<f64>,
123
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub pocket_step: Option<f64>,
127
128 #[serde(skip_serializing_if = "Option::is_none")]
130 pub price: Option<f64>,
131
132 #[serde(skip_serializing_if = "Option::is_none")]
134 pub rotation_speed: Option<f64>,
135
136 #[serde(rename = "rotation_speed_3d")]
138 #[serde(skip_serializing_if = "Option::is_none")]
139 pub rotation_speed_3_d: Option<f64>,
140
141 #[serde(skip_serializing_if = "Option::is_none")]
143 pub tab: Option<Tab>,
144
145 #[serde(skip_serializing_if = "Option::is_none")]
147 pub v_bit_path_height: Option<f64>,
148
149 #[serde(skip_serializing_if = "Option::is_none")]
151 pub xy_speed: Option<f64>,
152
153 #[serde(skip_serializing_if = "Option::is_none")]
155 pub z_speed: Option<f64>,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct Tab {
161 #[serde(skip_serializing_if = "Option::is_none")]
163 pub height: Option<f64>,
164
165 #[serde(skip_serializing_if = "Option::is_none")]
167 pub width: Option<f64>,
168}
169
170#[derive(Debug, Clone, Serialize, Deserialize)]
172pub struct Paint {
173 #[serde(skip_serializing_if = "Option::is_none")]
175 pub unit_cost: Option<f64>,
176}
177
178#[derive(Debug, Clone, Serialize, Deserialize)]
179pub struct Path {
180 pub ex_path: Vec<Point2D>,
182
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub font_angle: Option<f64>,
186
187 #[serde(skip_serializing_if = "Option::is_none")]
189 pub font_size: Option<f64>,
190
191 pub in_paths: Vec<Vec<Point2D>>,
193
194 pub label: String,
198
199 #[serde(skip_serializing_if = "Option::is_none")]
201 pub name: Option<String>,
202
203 pub num: i64,
205
206 pub po_deepness: Vec<f64>,
208
209 pub pocket: Vec<Pocket>,
211
212 #[serde(skip_serializing_if = "Option::is_none")]
214 pub sheet: Option<i64>,
215
216 #[serde(rename = "single_3d")]
218 #[serde(skip_serializing_if = "Option::is_none")]
219 pub single_3_d: Option<Vec<Vec<Point3D>>>,
220
221 #[serde(skip_serializing_if = "Option::is_none")]
223 pub single_deepness: Option<Vec<f64>>,
224
225 pub single_paths: Vec<Vec<Point2D>>,
229
230 #[serde(skip_serializing_if = "Option::is_none")]
232 pub start_point: Option<Vec<f64>>,
233
234 #[serde(skip_serializing_if = "Option::is_none")]
236 pub stl: Option<Vec<Stl>>,
237
238 #[serde(skip_serializing_if = "Option::is_none")]
239 pub tabs: Option<Tabs>,
240}
241
242#[derive(Debug, Clone, Serialize, Deserialize)]
243pub struct Point2D {
244 pub x: f64,
246
247 pub y: f64,
249}
250
251#[derive(Debug, Clone, Serialize, Deserialize)]
252pub struct Pocket {
253 pub ex_pocket: Vec<Point2D>,
255
256 pub in_pocket: Vec<Vec<Point2D>>,
258}
259
260#[derive(Debug, Clone, Serialize, Deserialize)]
261pub struct Point3D {
262 pub x: f64,
264
265 pub y: f64,
267
268 pub z: f64,
270}
271
272#[derive(Debug, Clone, Serialize, Deserialize)]
273pub struct Stl {
274 pub data: String,
276}
277
278#[derive(Debug, Clone, Serialize, Deserialize)]
279pub struct Tabs {
280 pub result: Result,
281}
282
283#[derive(Debug, Clone, Serialize, Deserialize)]
284pub struct Result {
285 pub exterior: Vec<Point2D>,
286
287 pub interior: Vec<Vec<Point2D>>,
288}
289
290#[derive(Debug, Clone, Serialize, Deserialize)]
291pub struct Plugin {
292 pub platform: String,
294
295 pub version: String,
297}
298
299#[derive(Debug, Clone, Serialize, Deserialize)]
300pub struct Screw {
301 pub position: Vec<Point2D>,
302
303 pub sheet: i64,
304}