Brijesh's Git Server — bsh @ 92d54f18eceb62f97feed88dcf68a482ee75d817

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
use crate::{error::ShellError, executor};
use std::io::{self, Write};

pub struct Shell {
    prompt: String,
}

impl Shell {
    pub fn new() -> Self {
        Self {
            prompt: "bsh> ".to_string(),
        }
    }

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

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

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

            executor::execute(input)?;
        }
        Ok(())
    }
}