]> git.huck.website - metaforge.git/commitdiff
refactored: scope to use display + more intuitive api
authorHuck Boles <huck@huck.website>
Wed, 31 May 2023 19:22:47 +0000 (14:22 -0500)
committerHuck Boles <huck@huck.website>
Wed, 31 May 2023 19:22:47 +0000 (14:22 -0500)
src/metafile.rs
src/metafile/file.rs
src/metafile/file/arrays.rs
src/metafile/file/patterns.rs
src/metafile/scope.rs
src/parser/array.rs
src/parser/def_block.rs

index c23fa8b871854957f97057c9a4074df399d5ea6a..54f68794595a38f57adda5d7fdbd3f81d4a75d01 100644 (file)
@@ -11,6 +11,8 @@ pub use scope::*;
 #[cfg(test)]
 mod tests;
 
+use std::fmt::Display;
+
 #[derive(Debug, Clone, PartialEq)]
 pub enum Src {
     Str(String),
@@ -20,27 +22,30 @@ pub enum Src {
 }
 
 impl Src {
-    pub fn to_var(var: impl ToString) -> Self {
+    pub fn to_var(var: impl Display) -> Self {
         Src::Var(var.to_string())
     }
 
-    pub fn to_arr(arr: impl ToString) -> Self {
+    pub fn to_arr(arr: impl Display) -> Self {
         Src::Arr(arr.to_string())
     }
 
-    pub fn to_pat(pat: impl ToString) -> Self {
+    pub fn to_pat(pat: impl Display) -> Self {
         Src::Pat(pat.to_string())
     }
 
-    pub fn to_str(str: impl ToString) -> Self {
+    pub fn to_str(str: impl Display) -> Self {
+        println!("{}", str.to_string());
         Src::Str(str.to_string())
     }
 }
 
-impl ToString for Src {
-    fn to_string(&self) -> String {
-        match self {
+impl Display for Src {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        let str = match self {
             Src::Var(x) | Src::Arr(x) | Src::Pat(x) | Src::Str(x) => x.to_string(),
-        }
+        };
+
+        write!(f, "{str}")
     }
 }
index c89c277eafedbf295c7ff3e10ca32072dc984251..a91843ce48a9a0d86fae55b4467199b04736901a 100644 (file)
@@ -72,10 +72,10 @@ impl<'a> MetaFile<'a> {
         })?;
 
         base.merge(self);
-        base.patterns.insert(Scope::into_global("SOURCE"), html);
+        base.patterns.insert(Scope::create_global("SOURCE"), html);
         let mut base_path = self.opts.pattern.join("base").join(
             self.patterns
-                .get(&Scope::into_global("base"))
+                .get(&Scope::create_global("base"))
                 .unwrap_or(&"default".into()),
         );
 
index 122e8b1741415139d343714bef98ada2a1d3ddd0..1b38c0f423f8dff4e94f1e78af19da7994ec8d86 100644 (file)
@@ -29,15 +29,15 @@ impl<'a> MetaFile<'a> {
 
                 let value = if let Some(val) = self.arrays.get(&name_key) {
                     &val[..]
-                } else if let Some(val) = self.arrays.get(&name_key.to_global()) {
+                } else if let Some(val) = self.arrays.get(&name_key.global()) {
                     &val[..]
                 } else if let Some(val) = self.arrays.get(&class_key) {
                     &val[..]
-                } else if let Some(val) = self.arrays.get(&class_key.to_global()) {
+                } else if let Some(val) = self.arrays.get(&class_key.global()) {
                     &val[..]
-                } else if let Some(val) = self.arrays.get(&Scope::into_global(key)) {
+                } else if let Some(val) = self.arrays.get(&Scope::create_global(key)) {
                     &val[..]
-                } else if let Some(val) = self.arrays.get(&Scope::into_local(key)) {
+                } else if let Some(val) = self.arrays.get(&Scope::create_local(key)) {
                     &val[..]
                 } else if self.opts.undefined {
                     panic!(
index 1df58444fd9d3750cce0693bb18b55389d7f4a6d..d019484dc260d9e8583c91fa4493bae18bc3924e 100644 (file)
@@ -5,16 +5,16 @@ impl<'a> MetaFile<'a> {
         log!(self.opts, format!("expanding {key}"), 2);
         // SOURCE is already expanded in the initial construct() call
         if key == "SOURCE" {
-            if let Some(source) = self.patterns.get(&Scope::into_global("SOURCE")) {
+            if let Some(source) = self.patterns.get(&Scope::create_global("SOURCE")) {
                 return Ok(source.to_string());
             } else {
                 return Ok(String::new());
             }
         }
 
-        let mut filename = if let Some(name) = self.patterns.get(&Scope::into_local(key)) {
+        let mut filename = if let Some(name) = self.patterns.get(&Scope::create_local(key)) {
             Ok(name.to_string())
-        } else if let Some(name) = self.patterns.get(&Scope::into_global(key)) {
+        } else if let Some(name) = self.patterns.get(&Scope::create_global(key)) {
             Ok(name.to_string())
         } else if self
             .opts
index 8e23b1db7f6a232e0bf00636fab8968c4c11a722..c1187c78f6693249a6bb71a06db393db45da5c64 100644 (file)
@@ -1,3 +1,5 @@
+use std::fmt::Display;
+
 #[derive(Debug, Clone, Eq, Hash, PartialEq)]
 pub enum Scope {
     Local(String),
@@ -5,11 +7,11 @@ pub enum Scope {
 }
 
 impl Scope {
-    pub fn into_local(str: impl ToString) -> Scope {
+    pub fn create_local(str: impl Display) -> Scope {
         Scope::Local(str.to_string())
     }
 
-    pub fn into_global(str: impl ToString) -> Scope {
+    pub fn create_global(str: impl ToString) -> Scope {
         Scope::Global(str.to_string())
     }
 
@@ -27,19 +29,21 @@ impl Scope {
         }
     }
 
-    pub fn to_local(&self) -> Scope {
+    pub fn local(&self) -> Scope {
         Scope::Local(self.to_string())
     }
 
-    pub fn to_global(&self) -> Scope {
+    pub fn global(&self) -> Scope {
         Scope::Global(self.to_string())
     }
 }
 
-impl ToString for Scope {
-    fn to_string(&self) -> String {
-        match self {
+impl Display for Scope {
+    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
+        let str = match self {
             Scope::Local(x) | Scope::Global(x) => x.to_string(),
-        }
+        };
+
+        write!(f, "{str}")
     }
 }
index 8358f586da7f629bd753e92c5eb3bde7891e8343..30b297998c6e83bfd135f537414233fd3a837ebe 100644 (file)
@@ -40,9 +40,9 @@ fn parse_assign_array(pair: Pair<Rule>) -> Result<(Scope, Vec<String>)> {
     }
 
     if global {
-        Ok((Scope::into_global(key), val))
+        Ok((Scope::create_global(key), val))
     } else {
-        Ok((Scope::into_local(key), val))
+        Ok((Scope::create_local(key), val))
     }
 }
 
index 26333efa0f0d4db5b4299e28a57590140182c791..080d1d48f443e0403fad886b4719f0ec08ff36a9 100644 (file)
@@ -55,8 +55,8 @@ fn parse_assign(pair: Pair<Rule>) -> Result<(Scope, &str)> {
     }
 
     if global {
-        Ok((Scope::into_global(key), val))
+        Ok((Scope::create_global(key), val))
     } else {
-        Ok((Scope::into_local(key), val))
+        Ok((Scope::create_local(key), val))
     }
 }