Просмотр исходного кода

feat: first recursive is done need to be able to have depth

MartinFillon 2 лет назад
Родитель
Сommit
c7f4c620c4
2 измененных файлов с 88 добавлено и 102 удалено
  1. 37 24
      src/output/details.rs
  2. 51 78
      test.json

+ 37 - 24
src/output/details.rs

@@ -252,17 +252,37 @@ impl<'a> Render<'a> {
         iter: &mut JsonTableIter<'_>,
         current_depth: i32,
         idx: &mut usize,
-    ) -> io::Result<()> {
-        let (row, depth) = iter.next().unwrap();
+        len: usize,
+    ) -> io::Result<i32> {
+        let (row, depth) = match iter.next() {
+            Some((row, depth)) => (row, depth),
+            None => return Ok(-1),
+        };
+        if self.opts.header {
+            writeln!(w, "{{")?;
+        } else {
+            writeln!(w, "[")?;
+        }
         self.print_row_contents(w, &row, header)?;
         writeln!(w, ", \"depth\": {}", depth.depth.0)?;
-        writeln!(w, ", \"current\": {current_depth}")?;
-        if depth.depth.0 as i32 > current_depth {
-            writeln!(w, ", \"children\": [{{")?;
-            writeln!(w, "}}]")?;
-        }
         *idx += 1;
-        Ok(())
+        if depth.depth.0 as i32 > (current_depth + 1) && current_depth != 0 {
+            writeln!(w, ", \"children\": [")?;
+            let mut d = self.print_row(w, header, iter, depth.depth.0 as i32, idx, len)?;
+            while d > depth.depth.0 as i32 && d != -1 {
+                d = self.print_row(w, header, iter, depth.depth.0 as i32, idx, len)?;
+            }
+            writeln!(w, "]")?;
+        }
+        if self.opts.header {
+            writeln!(w, "}}")?;
+        } else {
+            writeln!(w, "]")?;
+        }
+        if (*idx) < len {
+            writeln!(w, ",")?;
+        }
+        Ok(depth.depth.0 as i32)
     }
 
     pub fn render_json<W: Write>(self, w: &mut W) -> io::Result<()> {
@@ -306,24 +326,17 @@ impl<'a> Render<'a> {
             let len = row_iter.len();
             writeln!(w, "\"files\":[")?;
 
-            let current_depth: i32 = 0;
+            let current_depth: i32 = -2;
 
             while row_iter.len() > 0 {
-                if self.opts.header {
-                    writeln!(w, "{{")?;
-                } else {
-                    writeln!(w, "[")?;
-                }
-                writeln!(w, "\"index\": {},", i)?;
-                self.print_row(w, &(header.clone()), &mut row_iter, current_depth, &mut i)?;
-                if self.opts.header {
-                    writeln!(w, "}}")?;
-                } else {
-                    writeln!(w, "]")?;
-                }
-                if i < len {
-                    writeln!(w, ",")?;
-                }
+                self.print_row(
+                    w,
+                    &(header.clone()),
+                    &mut row_iter,
+                    current_depth,
+                    &mut i,
+                    len,
+                )?;
             }
             writeln!(w, "]\n}}")?;
         } else {

+ 51 - 78
test.json

@@ -1,79 +1,52 @@
 {
-    "files": [
-        {
-            "index": 0,
-            "Permissions": "drwxr-xr-x",
-            "Size": "-",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "/home/fexkoser/dev/eza-test",
-            "depth": 0,
-            "current": 0
-        },
-        {
-            "index": 1,
-            "Permissions": "drwxr-xr-x",
-            "Size": "-",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "caca",
-            "depth": 1,
-            "current": 0,
-            "children": [
-                {}
-            ]
-        },
-        {
-            "index": 2,
-            "Permissions": ".rw-r--r--",
-            "Size": "0",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "FruitBox.cpp",
-            "depth": 2,
-            "current": 0,
-            "children": [
-                {}
-            ]
-        },
-        {
-            "index": 3,
-            "Permissions": ".rw-r--r--",
-            "Size": "0",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "FruitBox.hpp",
-            "depth": 2,
-            "current": 0,
-            "children": [
-                {}
-            ]
-        },
-        {
-            "index": 4,
-            "Permissions": ".rw-r--r--",
-            "Size": "0",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "FruitBoxs.hpp",
-            "depth": 2,
-            "current": 0,
-            "children": [
-                {}
-            ]
-        },
-        {
-            "index": 5,
-            "Permissions": ".rw-r--r--",
-            "Size": "534",
-            "User": "fexkoser",
-            "Date Modified": "22 Jan 14:29",
-            "Name": "test.json",
-            "depth": 1,
-            "current": 0,
-            "children": [
-                {}
-            ]
-        }
-    ]
-}
+"files":[
+{
+"Permissions": "drwxr-xr-x", 
+"Size": "-", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "/home/fexkoser/dev/eza-test", "depth": 0
+, "children": [
+{
+"Permissions": "drwxr-xr-x", 
+"Size": "-", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "caca", "depth": 1
+}
+,
+{
+"Permissions": ".rw-r--r--", 
+"Size": "0", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "FruitBox.cpp", "depth": 2
+}
+,
+{
+"Permissions": ".rw-r--r--", 
+"Size": "0", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "FruitBox.hpp", "depth": 2
+}
+,
+{
+"Permissions": ".rw-r--r--", 
+"Size": "0", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "FruitBoxs.hpp", "depth": 2
+}
+,
+{
+"Permissions": ".rw-r--r--", 
+"Size": "534", 
+"User": "fexkoser", 
+"Date Modified": "22 Jan 14:29", 
+"Name": "test.json", "depth": 1
+}
+]
+}
+]
+}