v_name_generator 1.0.5

A short, v-starting name generator compatible with cli, ntfy, etc...
mod name_functions;
use dotenv::dotenv;
use rand::Rng;
use reqwest::Response;
use std::env;

use crate::name_functions::{generate_random_name, is_valid_name};

async fn send_ntfy(name: String) -> Result<Response, reqwest::Error> {
    let ntfy = env::var("NTFY_POST_URL").unwrap_or_else(|_| {
        dotenv().expect("Couldnt load the .env");
        env::var("NTFY_POST_URL").expect("Couldnt find the NTFY_POST_URL anywhere")
    });

    reqwest::Client::new()
        .post(ntfy)
        .body(format!("The new name is: {}", name.to_owned()))
        .header("Title", "New V-Name Generated")
        .header("Tags", "rotating_light")
        .send()
        .await
}

pub fn generate_valid_name() -> String {
    let mut rng = rand::rng();
    let letter_number = 3 + (rng.random::<i8>() % 3).abs();
    let mut name = generate_random_name(letter_number, &mut rng);

    while !is_valid_name(name.clone()) {
        name = generate_random_name(letter_number, &mut rng);
    }

    name
}

#[tokio::main]
async fn main() {
    let name = generate_valid_name();

    let args: Vec<String> = env::args().collect();

    if args.len() > 1 && args.get(1).expect("Error geting the 1 arg") == "ntfy" {
        let response = send_ntfy(name)
            .await
            .expect("Something wrong happened sending the ntfy");
        println!("ntfy sent correctly\nResponse code: {}", response.status());
    } else {
        println!("{}", name);
    }
}