assist 0.1.0

assist.org rust analysis
Documentation
use std::{fs::{self, File}, io::Write, path::Path};
use futures::{stream::FuturesUnordered, StreamExt};

#[tokio::main]
async fn main() {
    let dir = fs::read_dir("agreements/").unwrap();
    if !Path::new("txt").exists() {
        match fs::create_dir("txt") {
            Ok(_) => println!("Directory created successfully."),
            Err(e) => println!("Failed to create directory: {}", e),
        }
    };
    let mut futs = FuturesUnordered::new();
    let mut outputs = Vec::new();
    let threads = 128;
    for entry in dir {
        let fut = async move {
            let path = entry.unwrap().path();
            if path.is_file() && path.extension().is_some() && path.extension().unwrap() == "pdf" {//&& path.to_str().unwrap().contains("73-115") {
                match fs::read(&path) {
                    Ok(bytes) => {
                        // Extract text from PDF
                        match pdf_extract::extract_text_from_mem(&bytes) {
                            Ok(out) => {
                                eprintln!("File: {}", path.display());
                                let mut file = File::create(format!("./txt/{}.txt", path.file_stem().unwrap().to_str().unwrap().to_string())).unwrap();
                                file.write_all(out.as_bytes()).unwrap();
                            },
                            Err(e) => eprintln!("Error extracting text from {}: {}", path.display(), e),
                        }
                    }
                    Err(e) => eprintln!("Error reading file {}: {}", path.display(), e),
                }
            }
        };
        futs.push(fut);

        if futs.len() == threads {
            outputs.push(futs.next().await.unwrap());
        }
    }
    while let Some(item) = futs.next().await {
        outputs.push(item);
    }
}