#[derive(Debug)]
pub struct Args {
name: String,
params: Option<Vec<String>>,
}
impl Args {
pub fn name(&self) -> &str {
&self.name[..]
}
pub fn params(&self) -> &Option<Vec<String>> {
&self.params
}
}
pub trait Match {
fn match_args(args: &Args) -> bool;
}
pub trait Runnable {
fn run_args(&self, args: &Args);
}
pub fn parse(params: &Vec<String>) -> Args {
let ps = ¶ms[1..];
if ps.len() <= 0 {
return Args {
name: String::from("help"),
params: None,
}
}
let name = &ps[0];
let name = if name.starts_with('-') { &name[1..] } else { &name[..] };
let name = if name.starts_with('-') { &name[1..] } else { &name[..] };
let name = String::from(name);
let ps = &ps[1..];
if ps.len() <= 0 {
return Args {
name,
params: None,
}
}
let mut args: Vec<String> = Vec::new();
for p in ps {
args.push(String::from(p));
}
Args {
name,
params: Some(args),
}
}