Browse Source

Move config code into separate module

Kevin Lee 1 year ago
parent
commit
d783156e1d
4 changed files with 45 additions and 38 deletions
  1. 4 4
      config.yml
  2. 35 0
      src/config/mod.rs
  3. 3 32
      src/config.rs
  4. 3 2
      src/main.rs

+ 4 - 4
config.yml

@@ -1,5 +1,5 @@
-Pens: 
-  - !Patch
+Ops: 
+  - !PatchPen
     Pen: 0
     Color: [127, 127, 127]
     Enabled: true
@@ -7,11 +7,11 @@ Pens:
     Speed: 20.0
     Power: 55.0
     Frequency: 10000
-  - !Clone
+  - !ClonePen
     From: 0
     To: 1
     LoopCount: 2
-  - !Pattern
+  - !PatternPen
     From: 1
     To: 5
     Field: !Speed 10

+ 35 - 0
src/config/mod.rs

@@ -0,0 +1,35 @@
+use ezcad::pen::Pen;
+use serde::{Deserialize, Serialize};
+
+use self::pen::{ClonePen, PatchPen, PatternPen};
+
+pub mod pen;
+
+#[derive(Debug, Serialize, Deserialize)]
+pub enum Operation {
+    PatchPen(PatchPen),
+    ClonePen(ClonePen),
+    PatternPen(PatternPen),
+}
+
+pub trait Operations {
+    fn apply(&self, target: &mut Vec<Pen>);
+}
+
+impl Operations for Vec<Operation> {
+    fn apply(&self, target: &mut Vec<Pen>) {
+        for op in self {
+            match op {
+                Operation::PatchPen(x) => x.patch(target),
+                Operation::ClonePen(x) => x.clone(target),
+                Operation::PatternPen(x) => x.pattern(target),
+            }
+        }
+    }
+}
+
+#[derive(Debug, Serialize, Deserialize)]
+#[serde(rename_all = "PascalCase")]
+pub struct Config {
+    pub ops: Vec<Operation>,
+}

+ 3 - 32
src/config.rs

@@ -88,7 +88,7 @@ pub struct PatchPen {
 }
 
 impl PatchPen {
-    fn patch(&self, target: &mut Vec<Pen>) {
+    pub fn patch(&self, target: &mut Vec<Pen>) {
         self.patch.patch(self.pen, target);
     }
 }
@@ -103,7 +103,7 @@ pub struct ClonePen {
 }
 
 impl ClonePen {
-    fn clone(&self, target: &mut Vec<Pen>) {
+    pub fn clone(&self, target: &mut Vec<Pen>) {
         debug!("Cloning pen #{} to #{}", self.from, self.to);
         assert!(
             self.to > self.from,
@@ -139,7 +139,7 @@ pub struct PatternPen {
 }
 
 impl PatternPen {
-    fn pattern(&self, target: &mut Vec<Pen>) {
+    pub fn pattern(&self, target: &mut Vec<Pen>) {
         debug!("Patterning from pen #{} to #{}", self.from, self.to);
         assert!(
             self.to > self.from,
@@ -240,32 +240,3 @@ impl PatternPen {
         }
     }
 }
-
-#[derive(Debug, Serialize, Deserialize)]
-pub enum PenOperation {
-    Patch(PatchPen),
-    Clone(ClonePen),
-    Pattern(PatternPen),
-}
-
-pub trait PatchPens {
-    fn patch(&self, target: &mut Vec<Pen>);
-}
-
-impl PatchPens for Vec<PenOperation> {
-    fn patch(&self, target: &mut Vec<Pen>) {
-        for op in self {
-            match op {
-                PenOperation::Patch(x) => x.patch(target),
-                PenOperation::Clone(x) => x.clone(target),
-                PenOperation::Pattern(x) => x.pattern(target),
-            }
-        }
-    }
-}
-
-#[derive(Debug, Serialize, Deserialize)]
-#[serde(rename_all = "PascalCase")]
-pub struct Config {
-    pub pens: Vec<PenOperation>,
-}

+ 3 - 2
src/main.rs

@@ -6,7 +6,7 @@ use clap_verbosity_flag::{InfoLevel, Verbosity};
 use ezcad::file::EzCadHeader;
 use log::{info, trace};
 
-use crate::config::{Config, PatchPens};
+use crate::config::{Config, Operations};
 
 mod config;
 
@@ -33,6 +33,7 @@ fn main() {
 
     env_logger::builder()
         .format_timestamp(None)
+        .format_target(false)
         .filter_level(cli.verbose.log_level_filter())
         .init();
 
@@ -67,7 +68,7 @@ fn main() {
         let config: Config = serde_yaml::from_str(&config).expect("Failed to parse config file");
 
         // Patch pen settings
-        config.pens.patch(&mut file.pens_offset.data.pens);
+        config.ops.apply(&mut file.pens_offset.data.pens);
     }
 
     if let Some(output) = cli.output {