Skip to main content

libutils_terminal/
argument.rs

1//^
2//^ ARGUMENT
3//^
4
5//> ARGUMENT -> ENUM
6#[derive(Debug, Clone)]
7pub enum Argument {
8    File(String),
9    Alias(Vec<char>),
10    Flag(String),
11    Setting(String, String),
12    Target(String),
13    Unknown(String)
14} impl From<String> for Argument {
15    fn from(value: String) -> Self {return match value {
16        ref setting if let Some(setting) = setting.strip_prefix("--") && let Some((key, value)) = setting.split_once('=') => Argument::Setting(key.to_string(), value.to_string()),
17        ref flag if let Some(flag) = flag.strip_prefix("--") => Argument::Flag(flag.to_string()),
18        ref alias if let Some(alias) = alias.strip_prefix('-') => Argument::Alias(alias.chars().collect()),
19        other => {
20            let mut file = Some(false);
21            for character in other.chars() {file = match character {
22                num if num.is_numeric() => Some(true),
23                '/' | '\\' | '.' => Some(true),
24                letter if letter.is_alphabetic() => file,
25                _ => None
26            }};
27            match file {
28                None => Argument::Unknown(other),
29                Some(true) => Argument::File(other),
30                Some(false) => Argument::Target(other)
31            }
32        }
33    }}
34}