Brijesh's Git Server — bsh @ 3d7aa100971d1182386de49054e85b37e6ef1ef7

my own shell program

src/shell.rs (view raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
use crate::colours::red;
use crate::{error::ShellError, executor, prompt};
use std::io::{self, Write};

pub struct Shell;

impl Shell {
    pub fn new() -> Self {
        Self
    }

    pub fn run(&mut self) -> Result<(), ShellError> {
        loop {
            let prompt = prompt::generate_prompt();
            print!("{}", prompt);
            io::stdout().flush().map_err(ShellError::from)?;

            let mut input = String::new();
            io::stdin()
                .read_line(&mut input)
                .map_err(ShellError::from)?;
            let input = input.trim();

            if input.is_empty() {
                continue;
            }
            if input == "exit" {
                println!("Exiting BSH...");
                break;
            }

            match executor::execute(input) {
                Ok(_) => {}
                Err(err) => eprintln!("{}: {}", red("Error"), err),
            }
        }
        Ok(())
    }
}