mod.rs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  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, RandomizePen},
  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. RandomizePen(RandomizePen),
  15. ExportPen(ImportExportPen),
  16. ImportPen(ImportExportPen),
  17. DeleteObjects(DeleteObjects),
  18. Object(ObjectOperation),
  19. }
  20. pub trait Operations {
  21. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>);
  22. }
  23. impl Operations for Vec<Operation> {
  24. fn apply(&self, pens: &mut Vec<Pen>, layers: &mut ArrayOf<Layer>) {
  25. for op in self {
  26. match op {
  27. Operation::PatchPen(x) => x.patch(pens),
  28. Operation::ClonePen(x) => x.clone(pens),
  29. Operation::PatternPen(x) => x.pattern(pens),
  30. Operation::RandomizePen(x) => x.random(pens),
  31. Operation::ImportPen(x) => x.import(pens),
  32. Operation::ExportPen(x) => x.export(pens),
  33. Operation::DeleteObjects(x) => x.delete(layers),
  34. Operation::Object(x) => x.process(pens, layers),
  35. }
  36. }
  37. }
  38. }
  39. #[derive(Debug, Serialize, Deserialize)]
  40. #[serde(rename_all = "PascalCase")]
  41. pub struct Config {
  42. pub ops: Vec<Operation>,
  43. }