use ezcad::{array_of::ArrayOf, layer::Layer, pen::Pen}; use serde::{Deserialize, Serialize}; use self::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), // ExportObject(ExportObject), // ImportObject(ImportObject), // DeleteObjects(DeleteObjects), // MoveObject(MoveObject), // Array(Array), } 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::ImportPen(x) => x.import(pens), Operation::ExportPen(x) => x.export(pens), // Operation::ExportObject(x) => x.export(layers), // Operation::ImportObject(x) => x.import(layers), // Operation::DeleteObjects(x) => x.delete(layers), // Operation::MoveObject(x) => x.r#move(layers), // Operation::Array(x) => x.generate(pens, layers), } } } } #[derive(Debug, Serialize, Deserialize)] #[serde(rename_all = "PascalCase")] pub struct Config { pub ops: Vec, }