Bläddra i källkod

Add namespace Debug implementation for new representation

This actually prints the namespace in a much more useful format than we
could've before with the old data structure, indenting each level and
printing the objects nicely collected under their parents.
Isaac Woods 4 år sedan
förälder
incheckning
fb13e669e6
1 ändrade filer med 29 tillägg och 4 borttagningar
  1. 29 4
      aml/src/namespace.rs

+ 29 - 4
aml/src/namespace.rs

@@ -207,11 +207,36 @@ impl Namespace {
 
 impl fmt::Debug for Namespace {
     fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        for (name, handle) in self.name_map.iter() {
-            write!(f, "{}: {:?}\n", name, self.object_map.get(handle).unwrap())?;
-        }
+        const INDENT_PER_LEVEL: usize = 4;
+
+        fn print_level(
+            namespace: &Namespace,
+            f: &mut fmt::Formatter<'_>,
+            level_name: &str,
+            level: &NamespaceLevel,
+            indent: usize,
+        ) -> fmt::Result {
+            writeln!(f, "{:indent$}{}:", "", level_name, indent = indent)?;
+
+            for (name, handle) in level.values.iter() {
+                writeln!(
+                    f,
+                    "{:indent$}{}: {:?}",
+                    "",
+                    name.as_str(),
+                    namespace.object_map.get(handle).unwrap(),
+                    indent = indent + INDENT_PER_LEVEL
+                )?;
+            }
 
-        Ok(())
+            for (name, sub_level) in level.children.iter() {
+                print_level(namespace, f, name.as_str(), sub_level, indent + INDENT_PER_LEVEL)?;
+            }
+
+            Ok(())
+        };
+
+        print_level(self, f, "\\", &self.root, 0)
     }
 }