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

This commit is contained in:
MartinFillon 2024-02-06 11:58:34 +01:00
parent 8def9e3d16
commit c7f4c620c4
No known key found for this signature in database
GPG key ID: 16DC898F53F94853
2 changed files with 88 additions and 102 deletions

View file

@ -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 {

129
test.json
View file

@ -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
}
]
}
]
}