You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

57 lines
1.8 KiB
Rust

3 years ago
use std::str::FromStr;
use crate::{Directory, State};
pub fn handle_command(command_string : String, state : &mut State) {
let mut words = command_string.split(' ');
let command = words.next().unwrap();
let args = words.collect::<Vec<&str>>();
match command {
"clear" => {
state.output.clear();
}
"cd" => {
if args.len() == 0 {
state.current_working_directory = Directory::Home;
} else {
match state.current_working_directory {
Directory::Home => {
match args[0] {
"~" => (),
".." => state.output.push_back(String::from_str("bash: cd: ..: Permission denied").unwrap()),
"projects" => state.current_working_directory = Directory::Projects,
_ => {
if args[0].chars().next().unwrap() == '/' {
state.output.push_back(format!("bash: cd: {}: Permission denied", args[0]));
} else {
state.output.push_back(format!("bash: cd: {}: No such file or directory", args[0]));
}
}
}
},
Directory::Projects => {
match args[0] {
"~" => state.current_working_directory = Directory::Home,
".." => state.current_working_directory = Directory::Home,
_ => {
if args[0].chars().next().unwrap() == '/' {
state.output.push_back(format!("bash: cd: {}: Permission denied", args[0]));
} else {
state.output.push_back(format!("bash: cd: {}: No such file or directory", args[0]));
}
}
}
}
}
}
}
_ => {
state.output.push_back(format!("bash: {}: command not found", command));
}
}
}