vrsh 0.1.0

A simple shell written for my own learning.
use crate::shell::prompt::prompt_types::{PromptEscape, PromptCmdPart, PromptCmd, Argument};

grammar;

match {
    "%%" => ESCAPE_CHAR,
    "%n" => USERNAME,
    "%F" => START_FG_COLOR,
    "%f" => END_FG_COLOR,
    "%K" => START_BG_COLOR,
    "%k" => END_BG_COLOR,
    "%g" => GIT,
    "{" => LBRACE,
    "}" => RBRACE,
    r#"%([d/])"# => CWD,
    r#"%~"# => CWD_HOME,
    r#"[A-Z|a-z]*"# => WORD,
    r#"[01]?[0-9]?[0-9]|2[0-4][0-9]|25[0-5]"# => U8,
} else {
    r#"[^{}%]*"# => TEXT,
}

pub PromptCmd: PromptCmd = {
    <parts: PromptCmdPart*> => parts,
}

pub PromptCmdPart: PromptCmdPart = {
    <e: PromptExpansion> => PromptCmdPart::Escaped(e),
    TEXT => PromptCmdPart::Cmd(String::from(<>)),
}

PromptExpansion: PromptEscape = {
    ESCAPE_CHAR => PromptEscape::EscapeChar,
    USERNAME => PromptEscape::Username,
    CWD => PromptEscape::Cwd,
    CWD_HOME => PromptEscape::CwdHome,
    START_FG_COLOR LBRACE <a: Argument> RBRACE => PromptEscape::FGColorStart(a),
    END_FG_COLOR => PromptEscape::FGColorEnd,
    START_BG_COLOR LBRACE <a: Argument> RBRACE => PromptEscape::BGColorStart(a),
    END_BG_COLOR => PromptEscape::BGColorEnd,
    GIT => PromptEscape::Git,
}

Argument: Argument = {
    <w: WORD> => Argument::Word(String::from(w)),
    <n: U8> => Argument::Number(n.parse::<u8>().unwrap()),
}