RustTools 0.0.1

a powerful rust tools
Documentation
use std::fmt::{Display};
use std::string::String;
use std::env;
use crate::argparse::arg::Arg;

#[derive(Debug, Clone, Default)]
pub struct Command {
    name: String,
    author: String,
    version: String,
    about: String,
    subcommands: Vec<Command>,
    current_disp_ord: Option<usize>,
    disp_ord: Option<usize>,
}



impl Command {
    pub fn new(name: &str) -> Self {
        fn new_inner(name: &str) -> Command {
            let name = name.to_string();
            Command {
                name,
                ..Default::default()
            }
        }
        new_inner(name)
    }

    pub fn author(mut self, author: &str) -> Self {
        self.author = author.to_string();
        self
    }

    pub fn version(mut self, version: &str) -> Self {
        self.version = version.to_string();
        self
    }


    pub fn about(mut self, about: &str) -> Self {
        self.about = about.to_string();
        self
    }

    pub fn add(mut self, arg: Arg) -> Self {
        self
    }

    #[inline]
    #[must_use]
    pub fn subcommand(self, subcmd: impl Into<Command>) -> Self {
        let subcmd = subcmd.into();
        self.subcommand_internal(subcmd)
    }

    fn subcommand_internal(mut self, mut subcmd: Self) -> Self {
        if let Some(current_disp_ord) = self.current_disp_ord.as_mut() {
            let current = *current_disp_ord;
            subcmd.disp_ord.get_or_insert(current);
            *current_disp_ord = current + 1;
        }
        self.subcommands.push(subcmd);
        self
    }

    
    pub fn get_matches(self) -> Self {
        //self.get_matches_from(&mut env::args_os())
        let args: Vec<String> = env::args().collect();

        println!("{} {}", self.name, self.version);
        println!("{}", self.author);
        println!("{}", self.about);

        println!();
        println!("usage:");
        println!("  {} <sub_command>",args.get(0).unwrap());
        println!();
        println!("options:");
        println!("  -h, --help      {}", "Print Help Information");
        println!("  -v, --version   {}", "Print Version Information");
        println!();

        println!("{:?}", args);

        //let raw = RawArgs::new(env::args_os());
        //println!("{:?}", raw);


        self
    }
}