1#[derive(Debug, Clone, PartialEq)]
3pub struct OpFieldSchema {
4 pub name: &'static str,
6 pub ty: &'static str,
9 pub required: bool,
11}
12
13pub fn op_fields(name: &str) -> Option<&'static [OpFieldSchema]> {
18 match name {
22 "set_text_align" => {
23 static F: &[OpFieldSchema] = &[
24 OpFieldSchema {
25 name: "node",
26 ty: "node id",
27 required: true,
28 },
29 OpFieldSchema {
30 name: "align",
31 ty: "enum: start|center|end|justify",
32 required: true,
33 },
34 ];
35 Some(F)
36 }
37 "move_forward" | "move_backward" | "move_to_front" | "move_to_back" | "remove_node"
38 | "detach_pattern" => {
39 static F: &[OpFieldSchema] = &[OpFieldSchema {
40 name: "node",
41 ty: "node id",
42 required: true,
43 }];
44 Some(F)
45 }
46 "set_fill" => {
47 static F: &[OpFieldSchema] = &[
48 OpFieldSchema {
49 name: "node",
50 ty: "node id",
51 required: true,
52 },
53 OpFieldSchema {
54 name: "fill",
55 ty: "token ref",
56 required: true,
57 },
58 ];
59 Some(F)
60 }
61 "set_stroke" => {
62 static F: &[OpFieldSchema] = &[
63 OpFieldSchema {
64 name: "node",
65 ty: "node id",
66 required: true,
67 },
68 OpFieldSchema {
69 name: "stroke",
70 ty: "token ref",
71 required: true,
72 },
73 ];
74 Some(F)
75 }
76 "set_stroke_width" => {
77 static F: &[OpFieldSchema] = &[
78 OpFieldSchema {
79 name: "node",
80 ty: "node id",
81 required: true,
82 },
83 OpFieldSchema {
84 name: "stroke_width",
85 ty: "token ref",
86 required: true,
87 },
88 ];
89 Some(F)
90 }
91 "set_visible" => {
92 static F: &[OpFieldSchema] = &[
93 OpFieldSchema {
94 name: "node",
95 ty: "node id",
96 required: true,
97 },
98 OpFieldSchema {
99 name: "visible",
100 ty: "bool",
101 required: true,
102 },
103 ];
104 Some(F)
105 }
106 "set_locked" => {
107 static F: &[OpFieldSchema] = &[
108 OpFieldSchema {
109 name: "node",
110 ty: "node id",
111 required: true,
112 },
113 OpFieldSchema {
114 name: "locked",
115 ty: "bool",
116 required: true,
117 },
118 ];
119 Some(F)
120 }
121 "set_geometry" => {
122 static F: &[OpFieldSchema] = &[
123 OpFieldSchema {
124 name: "node",
125 ty: "node id",
126 required: true,
127 },
128 OpFieldSchema {
129 name: "x",
130 ty: "px",
131 required: false,
132 },
133 OpFieldSchema {
134 name: "y",
135 ty: "px",
136 required: false,
137 },
138 OpFieldSchema {
139 name: "w",
140 ty: "px",
141 required: false,
142 },
143 OpFieldSchema {
144 name: "h",
145 ty: "px",
146 required: false,
147 },
148 OpFieldSchema {
149 name: "rotate",
150 ty: "f64",
151 required: false,
152 },
153 ];
154 Some(F)
155 }
156 "set_points" => {
157 static F: &[OpFieldSchema] = &[
158 OpFieldSchema {
159 name: "node",
160 ty: "node id",
161 required: true,
162 },
163 OpFieldSchema {
164 name: "points",
165 ty: "[{x:f64,y:f64}]",
166 required: true,
167 },
168 ];
169 Some(F)
170 }
171 "add_node" => {
172 static F: &[OpFieldSchema] = &[
173 OpFieldSchema {
174 name: "parent",
175 ty: "node id",
176 required: true,
177 },
178 OpFieldSchema {
179 name: "source",
180 ty: ".zen fragment",
181 required: true,
182 },
183 OpFieldSchema {
184 name: "position",
185 ty: r#"{at:"last"} | {at:"first"} | {at:"index",index:N} | {at:"before",id:"<sibling-id>"} | {at:"after",id:"<sibling-id>"}"#,
186 required: false,
187 },
188 ];
189 Some(F)
190 }
191 "set_opacity" => {
192 static F: &[OpFieldSchema] = &[
193 OpFieldSchema {
194 name: "node",
195 ty: "node id",
196 required: true,
197 },
198 OpFieldSchema {
199 name: "opacity",
200 ty: "f64",
201 required: true,
202 },
203 ];
204 Some(F)
205 }
206 "replace_text" => {
207 static F: &[OpFieldSchema] = &[
208 OpFieldSchema {
209 name: "node",
210 ty: "node id",
211 required: true,
212 },
213 OpFieldSchema {
214 name: "spans",
215 ty: "[{text,fill?,font_weight?,italic?,…}]",
216 required: true,
217 },
218 ];
219 Some(F)
220 }
221 "duplicate_node" => {
222 static F: &[OpFieldSchema] = &[
223 OpFieldSchema {
224 name: "node",
225 ty: "node id",
226 required: true,
227 },
228 OpFieldSchema {
229 name: "new_id",
230 ty: "string",
231 required: true,
232 },
233 ];
234 Some(F)
235 }
236 "duplicate_page" => {
237 static F: &[OpFieldSchema] = &[
238 OpFieldSchema {
239 name: "page",
240 ty: "node id",
241 required: true,
242 },
243 OpFieldSchema {
244 name: "new_id",
245 ty: "string",
246 required: true,
247 },
248 OpFieldSchema {
249 name: "id_suffix",
250 ty: "string",
251 required: true,
252 },
253 ];
254 Some(F)
255 }
256 "group" => {
257 static F: &[OpFieldSchema] = &[
258 OpFieldSchema {
259 name: "node_ids",
260 ty: "node-id[]",
261 required: true,
262 },
263 OpFieldSchema {
264 name: "group_id",
265 ty: "string",
266 required: true,
267 },
268 ];
269 Some(F)
270 }
271 "ungroup" => {
272 static F: &[OpFieldSchema] = &[OpFieldSchema {
273 name: "group_id",
274 ty: "node id",
275 required: true,
276 }];
277 Some(F)
278 }
279 "reparent" => {
280 static F: &[OpFieldSchema] = &[
281 OpFieldSchema {
282 name: "node",
283 ty: "node id",
284 required: true,
285 },
286 OpFieldSchema {
287 name: "new_parent",
288 ty: "node id",
289 required: true,
290 },
291 OpFieldSchema {
292 name: "position",
293 ty: r#"{at:"last"} | {at:"first"} | {at:"index",index:N} | {at:"before",id:"<sibling-id>"} | {at:"after",id:"<sibling-id>"}"#,
294 required: false,
295 },
296 ];
297 Some(F)
298 }
299 "align_nodes" => {
300 static F: &[OpFieldSchema] = &[
301 OpFieldSchema {
302 name: "node_ids",
303 ty: "node-id[]",
304 required: true,
305 },
306 OpFieldSchema {
307 name: "align",
308 ty: "enum: left|hcenter|right|top|vcenter|bottom",
309 required: true,
310 },
311 OpFieldSchema {
312 name: "anchor",
313 ty: "string",
314 required: false,
315 },
316 ];
317 Some(F)
318 }
319 "set_text_overflow" => {
320 static F: &[OpFieldSchema] = &[
321 OpFieldSchema {
322 name: "node_id",
323 ty: "node id",
324 required: true,
325 },
326 OpFieldSchema {
327 name: "overflow",
328 ty: "enum: fit|clip|visible",
329 required: true,
330 },
331 ];
332 Some(F)
333 }
334 "add_page" => {
335 static F: &[OpFieldSchema] = &[
336 OpFieldSchema {
337 name: "id",
338 ty: "string",
339 required: true,
340 },
341 OpFieldSchema {
342 name: "w",
343 ty: "px",
344 required: true,
345 },
346 OpFieldSchema {
347 name: "h",
348 ty: "px",
349 required: true,
350 },
351 OpFieldSchema {
352 name: "background",
353 ty: "token ref",
354 required: false,
355 },
356 OpFieldSchema {
357 name: "index",
358 ty: "i64",
359 required: false,
360 },
361 ];
362 Some(F)
363 }
364 "delete_page" => {
365 static F: &[OpFieldSchema] = &[OpFieldSchema {
366 name: "page",
367 ty: "node id",
368 required: true,
369 }];
370 Some(F)
371 }
372 "reorder_pages" => {
373 static F: &[OpFieldSchema] = &[OpFieldSchema {
374 name: "order",
375 ty: "node-id[]",
376 required: true,
377 }];
378 Some(F)
379 }
380 "add_asset" => {
381 static F: &[OpFieldSchema] = &[
382 OpFieldSchema {
383 name: "id",
384 ty: "string",
385 required: true,
386 },
387 OpFieldSchema {
388 name: "kind",
389 ty: "enum: image|svg|font",
390 required: true,
391 },
392 OpFieldSchema {
393 name: "src",
394 ty: "string",
395 required: true,
396 },
397 OpFieldSchema {
398 name: "sha256",
399 ty: "string",
400 required: false,
401 },
402 ];
403 Some(F)
404 }
405 "set_asset" => {
406 static F: &[OpFieldSchema] = &[
407 OpFieldSchema {
408 name: "node_id",
409 ty: "node id",
410 required: true,
411 },
412 OpFieldSchema {
413 name: "asset_id",
414 ty: "string",
415 required: true,
416 },
417 ];
418 Some(F)
419 }
420 "distribute_nodes" => {
421 static F: &[OpFieldSchema] = &[
422 OpFieldSchema {
423 name: "node_ids",
424 ty: "node-id[]",
425 required: true,
426 },
427 OpFieldSchema {
428 name: "axis",
429 ty: "enum: horizontal|vertical",
430 required: true,
431 },
432 ];
433 Some(F)
434 }
435 "create_token" => {
436 static F: &[OpFieldSchema] = &[
437 OpFieldSchema {
438 name: "id",
439 ty: "string",
440 required: true,
441 },
442 OpFieldSchema {
443 name: "type",
444 ty: "enum: color|dimension|number|fontFamily|fontWeight",
445 required: true,
446 },
447 OpFieldSchema {
448 name: "value",
449 ty: "string",
450 required: true,
451 },
452 ];
453 Some(F)
454 }
455 "update_token_value" => {
456 static F: &[OpFieldSchema] = &[
457 OpFieldSchema {
458 name: "id",
459 ty: "string",
460 required: true,
461 },
462 OpFieldSchema {
463 name: "value",
464 ty: "string",
465 required: true,
466 },
467 ];
468 Some(F)
469 }
470 "set_style_property" => {
471 static F: &[OpFieldSchema] = &[
472 OpFieldSchema {
473 name: "style_id",
474 ty: "string",
475 required: true,
476 },
477 OpFieldSchema {
478 name: "property",
479 ty: "string",
480 required: true,
481 },
482 OpFieldSchema {
483 name: "value",
484 ty: "token ref",
485 required: true,
486 },
487 ];
488 Some(F)
489 }
490 "set_text_direction" => {
491 static F: &[OpFieldSchema] = &[
492 OpFieldSchema {
493 name: "node",
494 ty: "node id",
495 required: true,
496 },
497 OpFieldSchema {
498 name: "direction",
499 ty: "enum: ltr|rtl",
500 required: true,
501 },
502 ];
503 Some(F)
504 }
505 "find_replace_text" => {
506 static F: &[OpFieldSchema] = &[
507 OpFieldSchema {
508 name: "find",
509 ty: "string",
510 required: true,
511 },
512 OpFieldSchema {
513 name: "replace",
514 ty: "string",
515 required: true,
516 },
517 OpFieldSchema {
518 name: "node",
519 ty: "node id",
520 required: false,
521 },
522 ];
523 Some(F)
524 }
525 "set_page_size" => {
526 static F: &[OpFieldSchema] = &[
527 OpFieldSchema {
528 name: "page",
529 ty: "node id",
530 required: true,
531 },
532 OpFieldSchema {
533 name: "w",
534 ty: "px",
535 required: true,
536 },
537 OpFieldSchema {
538 name: "h",
539 ty: "px",
540 required: true,
541 },
542 ];
543 Some(F)
544 }
545 "align_to_edge" => {
546 static F: &[OpFieldSchema] = &[
547 OpFieldSchema {
548 name: "node",
549 ty: "node id",
550 required: true,
551 },
552 OpFieldSchema {
553 name: "edge",
554 ty: "enum: left|right|top|bottom|hcenter|vcenter",
555 required: true,
556 },
557 OpFieldSchema {
558 name: "margin",
559 ty: "f64",
560 required: false,
561 },
562 ];
563 Some(F)
564 }
565 "create_recipe" => {
566 static F: &[OpFieldSchema] = &[
567 OpFieldSchema {
568 name: "id",
569 ty: "string",
570 required: true,
571 },
572 OpFieldSchema {
573 name: "kind",
574 ty: "string",
575 required: true,
576 },
577 OpFieldSchema {
578 name: "seed",
579 ty: "i64",
580 required: false,
581 },
582 OpFieldSchema {
583 name: "generator",
584 ty: "string",
585 required: false,
586 },
587 OpFieldSchema {
588 name: "bounds",
589 ty: "node id",
590 required: false,
591 },
592 OpFieldSchema {
593 name: "detached",
594 ty: "bool",
595 required: false,
596 },
597 ];
598 Some(F)
599 }
600 "update_recipe" => {
601 static F: &[OpFieldSchema] = &[
602 OpFieldSchema {
603 name: "id",
604 ty: "string",
605 required: true,
606 },
607 OpFieldSchema {
608 name: "kind",
609 ty: "string",
610 required: true,
611 },
612 OpFieldSchema {
613 name: "seed",
614 ty: "i64",
615 required: false,
616 },
617 OpFieldSchema {
618 name: "generator",
619 ty: "string",
620 required: false,
621 },
622 OpFieldSchema {
623 name: "bounds",
624 ty: "node id",
625 required: false,
626 },
627 OpFieldSchema {
628 name: "detached",
629 ty: "bool",
630 required: false,
631 },
632 ];
633 Some(F)
634 }
635 "delete_recipe" => {
636 static F: &[OpFieldSchema] = &[OpFieldSchema {
637 name: "id",
638 ty: "string",
639 required: true,
640 }];
641 Some(F)
642 }
643 _ => None,
644 }
645}