rust_mkdir 0.1.0

A tool to create directories
Documentation
use colorful::Color;
use colorful::Colorful;

pub struct Config {
    pub dir_list: Vec<String>,
    pub flags: Vec<String>,
}

impl Config {
    pub fn build(args: Vec<String>) -> Result<Config, &'static str> {

        if args.len() < 2 {
            return Err("Not enough argument");
        }

        let mut flags: Vec<String> = vec![];
        
        for arg in &args[1..] {
            if arg == "-v" || arg == "--verbose" {
                flags.push(String::from("-v"));
            }
            else if arg == "-h" || arg == "--help" {
                flags.push(String::from("-h"));
            }
            else if arg == "-p" || arg == "--parent" {
                flags.push(String::from("-p"));
            }
        }

        let mut dir_list: Vec<String>  = vec![];

        for arg in &args[1..] {
            if !flags.contains(&arg) {
                dir_list.push(arg.clone());
            }
        } 

        Ok(Config{ dir_list, flags })
    }
}

pub fn run(flags: Vec<String>, dir_list: Vec<String>) {
    if flags.contains(&String::from("-h")) {
        let help_txt = "NAME
        mkdir - make directories
 
 SYNOPSIS
        mkdir [OPTION]... DIRECTORY...
 
 DESCRIPTION
        Create the DIRECTORY(ies), if they do not already exist.
 
        Mandatory arguments to long options are mandatory for short options too.
 
        -p, --parents
               no error if existing, make parent directories as needed, with their file modes unaffected by any -m option.
 
        -v, --verbose
               print a message for each created directory
 
        --help display this help and exit
 
        --version
               output version information and exit
 
 AUTHOR
        Written by Truthixify.";
        println!("{}", help_txt.gradient(Color::Aquamarine1a));
        return
    }
    else if flags.contains(&String::from("-v")) {
        create(flags, dir_list.clone());
        for dir in dir_list {
            println!("{}", format!("✔️ mkdir: created directory(s) '{}'",dir).gradient(Color::Blue));
        }
    }
    else {
        create(flags, dir_list);
    }
}

pub fn create (flags: Vec<String>, dir_list: Vec<String>) {
    if flags.contains(&String::from("-p")) || flags.contains(&String::from("-p")) {
        for dir in dir_list.clone() {
            std::fs::create_dir_all(dir).unwrap_or_else(|err| {
                eprintln!("{}", format!("Error creating the directory(s): {err}").gradient(Color::Red));
                std::process::exit(1);
            });
        }
    }
    else {
        for dir in dir_list {
            std::fs::create_dir(dir).unwrap_or_else(|err| {
                eprintln!("{}", format!("Error creating the directory(s): {err}").gradient(Color::Red));
                std::process::exit(1);
            });
        }
    }
}