use strum_macros::Display;
#[derive(Debug, PartialEq)]
pub enum Argument {
Basic(BasicArgument),
List(Vec<BasicArgument>),
Flag,
}
#[derive(Debug, PartialEq)]
pub enum BasicArgument {
String(String),
Integer(i64),
}
#[derive(Eq, Hash, PartialEq, Display)]
pub enum ArgumentKind {
Basic(BasicArgumentKind),
#[allow(unused)]
List(Vec<BasicArgumentKind>),
Enumeration(BasicArgumentKind),
Flag,
}
#[derive(Eq, Hash, PartialEq, Display, Clone)]
pub enum BasicArgumentKind {
String,
Integer,
}
pub fn parse_string_argument(arg: &str, kind: &ArgumentKind) -> Result<BasicArgument, String> {
match kind {
ArgumentKind::Basic(kind) => match kind {
BasicArgumentKind::String => Ok(BasicArgument::String(arg.to_string())),
BasicArgumentKind::Integer => {
let arg = arg.parse::<i64>().map_err(|e| e.to_string())?;
Ok(BasicArgument::Integer(arg))
}
},
argument => Err(format!("Invalid argument kind: {argument}")),
}
}