Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub enum ETrackState {
- APT_INSTALL,
- APT_AUTOREMOVE,
- VIM_EDIT,
- CURL,
- }
- pub struct ConfigTracker {
- track_state: ETrackState,
- args: Vec<String>,
- }
- impl ConfigTracker {
- pub fn new<T>(shell_input: T) -> Self
- where
- T: Into<String>,
- {
- let track_state: ETrackState;
- let args: Vec<String>;
- let terms: Vec<String> = shell_input
- .into()
- .split_whitespace()
- .map(|s| s.to_string())
- .collect();
- // check_input
- match terms[0].as_str() {
- "apt" if terms.len() >= 3 => {
- match terms[1].as_str() {
- "install" => track_state = ETrackState::APT_INSTALL,
- "autoremove" => track_state = ETrackState::APT_AUTOREMOVE,
- _ => panic!(),
- };
- args = terms[2..].into();
- }
- "vim" if terms.len() >= 2 => {
- track_state = ETrackState::VIM_EDIT;
- args = terms[1..].into();
- }
- "curl" if terms.len() >= 2 => {
- track_state = ETrackState::CURL;
- args = terms[1..].into();
- }
- _ => {
- panic!("Invalid input") // just run and display the pure error messages.
- }
- }
- return Self { track_state, args };
- }
- pub fn print_self(&self) {
- use ETrackState::*;
- let state = match self.track_state {
- APT_INSTALL => "apt install",
- APT_AUTOREMOVE => "apt autoremove",
- VIM_EDIT => "vim",
- CURL => "curl",
- };
- println!("{}, {:?}", state, self.args);
- }
- }
- fn main() {
- let tracker = ConfigTracker::new("vim");
- tracker.print_self();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement