libutils_console/
argument.rs1use alloc::{
7 vec::Vec,
8 string::{
9 String,
10 ToString
11 }
12};
13
14
15#[derive(Debug, Clone)]
21pub enum Argument {
22 Path(String),
23 Alias(Vec<char>),
24 Flag(String),
25 Setting(String, String),
26 Target(String),
27 Unknown(String)
28} impl From<String> for Argument {
29 fn from(value: String) -> Self {return match value {
30 ref setting if let Some(setting) = setting.strip_prefix("--") && let Some((key, value)) = setting.split_once('=') => Argument::Setting(key.to_string(), value.to_string()),
31 ref flag if let Some(flag) = flag.strip_prefix("--") => Argument::Flag(flag.to_string()),
32 ref alias if let Some(alias) = alias.strip_prefix('-') => Argument::Alias(alias.chars().collect()),
33 other => {
34 let mut path = Some(false);
35 for character in other.chars() {path = match character {
36 num if num.is_numeric() => Some(true),
37 '/' | '\\' | '.' | ':' => Some(true),
38 letter if letter.is_alphabetic() => path,
39 _ => None
40 }};
41 match path {
42 None => Argument::Unknown(other),
43 Some(true) => Argument::Path(other),
44 Some(false) => Argument::Target(other)
45 }
46 }
47 }}
48}