Skip to main content

libutils_console/
argument.rs

1//^
2//^ HEAD
3//^
4
5//> HEAD -> ALLOC
6use alloc::{
7    vec::Vec,
8    string::{
9        String,
10        ToString
11    }
12};
13
14
15//^
16//^ ARGUMENT
17//^
18
19//> ARGUMENT -> ENUM
20#[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}