1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- use ezcad::{array_of::ArrayOf, layer::Layer, pen::Pen};
- use serde::{Deserialize, Serialize};
- use self::{
- object::{DeleteObjects, ObjectOperation},
- pen::{ClonePen, ImportExportPen, PatchPen, PatternPen},
- };
- pub mod object;
- pub mod pen;
- #[derive(Debug, Serialize, Deserialize)]
- pub enum Operation {
- PatchPen(PatchPen),
- ClonePen(ClonePen),
- PatternPen(PatternPen),
- ExportPen(ImportExportPen),
- ImportPen(ImportExportPen),
- DeleteObjects(DeleteObjects),
- Object(ObjectOperation),
- }
- pub trait Operations {
- fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>);
- }
- impl Operations for Vec<Operation> {
- fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>) {
- for op in self {
- match op {
- Operation::PatchPen(x) => x.patch(pens),
- Operation::ClonePen(x) => x.clone(pens),
- Operation::PatternPen(x) => x.pattern(pens),
- Operation::ImportPen(x) => x.import(pens),
- Operation::ExportPen(x) => x.export(pens),
- Operation::DeleteObjects(x) => x.delete(layers),
- Operation::Object(x) => x.process(pens, layers),
- }
- }
- }
- }
- #[derive(Debug, Serialize, Deserialize)]
- #[serde(rename_all = "PascalCase")]
- pub struct Config {
- pub ops: Vec<Operation>,
- }
|