use crate::entry::Entry;
use crate::tree::{self, TreeEntry};
use std::io::{self, Write};
pub fn write(w: &mut impl Write, entries: &[&Entry]) -> io::Result<()> {
let tree = tree::to_tree(entries);
for (i, node) in tree.iter().enumerate() {
let is_last = i == tree.len() - 1;
write_node(w, node, "", is_last)?;
}
Ok(())
}
fn write_node(w: &mut impl Write, node: &TreeEntry, prefix: &str, is_last: bool) -> io::Result<()> {
let connector = if is_last { "└── " } else { "├── " };
writeln!(w, "{}{}{}", prefix, connector, node.entry.name())?;
let child_prefix = if is_last {
format!("{} ", prefix)
} else {
format!("{}│ ", prefix)
};
for (i, child) in node.children.iter().enumerate() {
let child_is_last = i == node.children.len() - 1;
write_node(w, child, &child_prefix, child_is_last)?;
}
Ok(())
}