webgrep 0.4.3

grep the web: a full-browser-spec search-focused ultra-simple way to read the web without having to leave the terminal
use crate::structs::Args::ArgParser;
use clap::Parser;
use colored::Colorize;
use regex::Regex;
use std::collections::HashMap;
#[path = "./structs/mod.rs"]
mod structs;
#[path = "./utils/mod.rs"]
mod utils;

use utils::request_handler;
#[tokio::main]
async fn main() {
    let args: crate::structs::Args::ArgParser = ArgParser::parse();
    let mut text_elements: HashMap<String, Vec<String>> = HashMap::new();
    if args.recursive.is_some() {
        text_elements = utils::recurse::recurse(
            args.url,
            args.recursive.unwrap(),
            Some(utils::should_use_chrome::should_use_chrome(args.use_chrome)),
        )
        .await;
    } else {
        if utils::determine_file_type::determine_file_type(&args.url) == "pdf" {
            text_elements.insert(
                args.url.clone(),
                request_handler::read_pdf_from_url(args.url).await,
            );
        } else {
            text_elements.insert(
                args.url.clone(),
                request_handler::get_text_elements_from_url(
                    args.url,
                    Some(utils::should_use_chrome::should_use_chrome(args.use_chrome)),
                )
                .await,
            );
        }
    }
    let num_urls = text_elements.keys().len();
    let mut re = Regex::new(".*").unwrap();
    if args.search.is_some() {
        if args.insensitive.is_some() && args.insensitive.unwrap() == true {
            re = Regex::new(&("(?i)".to_owned() + &args.search.unwrap())).unwrap();
        } else {
            re = Regex::new(&args.search.unwrap()).unwrap();
        }
    }
    for (link, texts) in text_elements.into_iter() {
        let mut printed_texts: HashMap<String, bool> = HashMap::new();
        for text in texts {
            if re.is_match(&text) && !printed_texts.contains_key(&text) {
                printed_texts.insert(text.to_string(), true);
                if num_urls > 1 {
                    print!("{}", link.blue());
                    print!("{}", ":".green());
                }

                utils::prettyprint::prettyprint(text.to_string(), re.clone());
            }
        }
    }
}