adof 0.12.0

ADOF - An Automatic Dot-files Organizer Friend
Documentation
use anyhow::Result;
use std::fs;
use std::path::Path;

pub fn list() -> Result<()> {
    let path = Path::new("/home/abinash/.adof");
    println!("Root 📦 {}", path.display());
    print_directory(path, "");
    Ok(())
}

fn print_directory(path: &Path, prefix: &str) {
    if let Ok(entries) = fs::read_dir(path) {
        let entries: Vec<_> = entries
            .filter_map(Result::ok)
            .filter(|entry| entry.file_name() != ".git")
            .collect();
        let len = entries.len();

        for (i, entry) in entries.iter().enumerate() {
            let path = entry.path();
            let is_last_entry = i == len - 1;

            print_entry(&path, prefix, is_last_entry, path.is_dir());

            if path.is_dir() {
                let new_prefix = if is_last_entry {
                    format!("{}    ", prefix)
                } else {
                    format!("{}│   ", prefix)
                };
                print_directory(&path, &new_prefix);
            }
        }
    }
}

fn print_entry(path: &Path, prefix: &str, is_last: bool, is_dir: bool) {
    let icon = if is_dir { "📂" } else { "📄" };
    let connector = if is_last { "└──" } else { "├──" };
    let name = path.file_name().unwrap().to_string_lossy();

    println!("{}{} {} {}", prefix, connector, icon, name);
}