use ezcad::{array_of::ArrayOf, layer::Layer, pen::Pen}; use serde::{Deserialize, Serialize}; use self::{ object::{DeleteObjects, ObjectOperation}, pen::{ClonePen, ImportExportPen, PatchPen, PatternPen, RandomizePen}, }; pub mod object; pub mod pen; #[derive(Debug, Serialize, Deserialize)] pub enum Operation { PatchPen(PatchPen), ClonePen(ClonePen), PatternPen(PatternPen), RandomizePen(RandomizePen), ExportPen(ImportExportPen), ImportPen(ImportExportPen), DeleteObjects(DeleteObjects), Object(ObjectOperation), } pub trait Operations { fn apply(&self, pens: &mut Vec, layers: &mut ArrayOf); } impl Operations for Vec { fn apply(&self, pens: &mut Vec, layers: &mut ArrayOf) { 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::RandomizePen(x) => x.random(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, }