#![doc = include_str!("../README.md")]
mod commands_argv;
mod flags;
mod utils;
use commands_argv::transform_command_argv;
use flags::transform_flags_argv;
use std::collections::HashMap;
use std::env;
use utils::remove_dashdash;
#[derive(Debug, Clone, Default, PartialEq)]
pub struct Argv {
pub commands: Vec<String>,
pub flags: HashMap<String, String>,
after_double_dash: String
}
impl Argv {
pub fn parse() -> Self {
Argv::from(&env::args().collect::<Vec<String>>()[1..])
}
pub fn after_dashes(&self) -> &str {
self.after_double_dash.as_str()
}
fn transform_vargs(args: &[String]) -> Argv {
let (args, after_double_dash) = remove_dashdash(args);
let flags = transform_flags_argv(&args);
let commands = transform_command_argv(&args);
Argv { commands, flags, after_double_dash }
}
}
impl From<&str> for Argv {
fn from(args: &str) -> Self {
let args = args.split(' ').map(|value| value.to_string()).collect::<Vec<String>>();
Argv::transform_vargs(&args)
}
}
impl From<String> for Argv {
fn from(args: String) -> Self {
let args = args.split(' ').map(|value| value.to_string()).collect::<Vec<String>>();
Argv::transform_vargs(&args)
}
}
impl From<&[String]> for Argv {
fn from(args: &[String]) -> Self {
let args = args.iter().map(|value| value.to_string()).collect::<Vec<String>>();
Argv::transform_vargs(&args)
}
}