Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.75 KB | None | 0 0
  1. pub enum ETrackState {
  2. APT_INSTALL,
  3. APT_AUTOREMOVE,
  4. VIM_EDIT,
  5. CURL,
  6. }
  7.  
  8. pub struct ConfigTracker {
  9. track_state: ETrackState,
  10. args: Vec<String>,
  11. }
  12.  
  13. impl ConfigTracker {
  14. pub fn new<T>(shell_input: T) -> Self
  15. where
  16. T: Into<String>,
  17. {
  18. let track_state: ETrackState;
  19. let args: Vec<String>;
  20. let terms: Vec<String> = shell_input
  21. .into()
  22. .split_whitespace()
  23. .map(|s| s.to_string())
  24. .collect();
  25.  
  26. // check_input
  27. match terms[0].as_str() {
  28. "apt" if terms.len() >= 3 => {
  29. match terms[1].as_str() {
  30. "install" => track_state = ETrackState::APT_INSTALL,
  31. "autoremove" => track_state = ETrackState::APT_AUTOREMOVE,
  32. _ => panic!(),
  33. };
  34. args = terms[2..].into();
  35. }
  36.  
  37. "vim" if terms.len() >= 2 => {
  38. track_state = ETrackState::VIM_EDIT;
  39. args = terms[1..].into();
  40. }
  41.  
  42. "curl" if terms.len() >= 2 => {
  43. track_state = ETrackState::CURL;
  44. args = terms[1..].into();
  45. }
  46.  
  47. _ => {
  48. panic!("Invalid input") // just run and display the pure error messages.
  49. }
  50. }
  51. return Self { track_state, args };
  52. }
  53.  
  54. pub fn print_self(&self) {
  55. use ETrackState::*;
  56. let state = match self.track_state {
  57. APT_INSTALL => "apt install",
  58. APT_AUTOREMOVE => "apt autoremove",
  59. VIM_EDIT => "vim",
  60. CURL => "curl",
  61. };
  62. println!("{}, {:?}", state, self.args);
  63. }
  64. }
  65.  
  66. fn main() {
  67. let tracker = ConfigTracker::new("vim");
  68. tracker.print_self();
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement