mod fs;
mod history;
mod invoke;
mod string;
use std::str::FromStr;
use thiserror::Error;
pub(crate) use invoke::invoke_builtin;
pub const BUILTIN_COMMANDS: [&str; 7] = ["echo", "exit", "type", "pwd", "cd", "history", "jobs"];
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Builtin {
Echo,
Exit,
Tipe,
Pwd,
Cd,
History,
Jobs,
}
#[derive(Debug, Error, Clone, PartialEq, Eq, PartialOrd, Ord)]
pub enum FromStrError {
#[error("Unknown builtin {0}")]
UnknownBuiltin(String),
}
impl FromStr for Builtin {
type Err = FromStrError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s {
"echo" => Ok(Builtin::Echo),
"exit" => Ok(Builtin::Exit),
"type" => Ok(Builtin::Tipe),
"pwd" => Ok(Builtin::Pwd),
"cd" => Ok(Builtin::Cd),
"history" => Ok(Builtin::History),
"jobs" => Ok(Builtin::Jobs),
_ => Err(FromStrError::UnknownBuiltin(s.to_string())),
}
}
}