assist 0.1.0

assist.org rust analysis
Documentation
use std::fs;
use std::io;
use std::path::Path;

fn main() -> io::Result<()> {
    let dir = "./agreements/";
    process_files(dir)?;
    Ok(())
}

fn process_files(dir: &str) -> io::Result<()> {
    let paths = fs::read_dir(dir)?;

    for path in paths {
        let path = path?.path();
        if path.is_file() {
            let file_name = path.file_name().unwrap().to_str().unwrap();
            let parts: Vec<&str> = file_name.split('-').collect();

            if parts.len() < 4 {
                eprintln!("Skipping file {}: does not have enough parts", file_name);
                continue;
            }

            let first = parts[0];
            let second = parts[1];
            let third = parts[2];
            let fourth = parts[3..].join("-");

            let new_dir = Path::new(dir).join(first).join(second).join(third);
            fs::create_dir_all(&new_dir)?;

            let new_file_path = new_dir.join(fourth);
            fs::rename(&path, &new_file_path)?;
        }
    }

    Ok(())
}