mod.rs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. use ezcad::{array_of::ArrayOf, layer::Layer, pen::Pen};
  2. use serde::{Deserialize, Serialize};
  3. use self::{
  4. object::{DeleteObjects, ObjectOperation},
  5. pen::{ClonePen, ImportExportPen, PatchPen, PatternPen},
  6. };
  7. pub mod object;
  8. pub mod pen;
  9. #[derive(Debug, Serialize, Deserialize)]
  10. pub enum Operation {
  11. PatchPen(PatchPen),
  12. ClonePen(ClonePen),
  13. PatternPen(PatternPen),
  14. ExportPen(ImportExportPen),
  15. ImportPen(ImportExportPen),
  16. DeleteObjects(DeleteObjects),
  17. ObjectOperation(ObjectOperation),
  18. }
  19. pub trait Operations {
  20. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>);
  21. }
  22. impl Operations for Vec<Operation> {
  23. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>) {
  24. for op in self {
  25. match op {
  26. Operation::PatchPen(x) => x.patch(pens),
  27. Operation::ClonePen(x) => x.clone(pens),
  28. Operation::PatternPen(x) => x.pattern(pens),
  29. Operation::ImportPen(x) => x.import(pens),
  30. Operation::ExportPen(x) => x.export(pens),
  31. Operation::DeleteObjects(x) => x.delete(layers),
  32. Operation::ObjectOperation(x) => x.process(pens, layers),
  33. }
  34. }
  35. }
  36. }
  37. #[derive(Debug, Serialize, Deserialize)]
  38. #[serde(rename_all = "PascalCase")]
  39. pub struct Config {
  40. pub ops: Vec<Operation>,
  41. }