use crate::builtins::{Builtin, BuiltinConfig}; use crate::error::ShellError; use colored::Colorize; pub struct Help; impl Builtin for Help { fn execute(&mut self, _: &mut BuiltinConfig, _: Vec) -> Result<(), ShellError> { let commands = "blahaj prints blahaj, styles: p, t cd changes current working directory change-prompt changes prompt style (default, bashlike, simpledirectory) exit exits the shell fetch prints out system information help displays this command logout current user gets logged out ls lists contents of directory open shows content of files pwd shows path to current working directory quote prints a random quote segfault exits, but the elegant way sus shows amogus "; for line in commands.lines() { println!( "{}{}", split_command(line)[0].bold(), split_command(line)[1] ); } Ok(()) } } fn split_command(commands: &str) -> Vec<&str> { if !commands.trim_start().is_empty() { let splitted_command = commands.trim_start().splitn(2, ' ').collect(); return splitted_command; } vec!["", ""] } #[cfg(test)] mod tests { use super::*; #[test] fn test_split_command_split() { let test_string1 = "Hallo, Marcel Davis 1&1."; assert_eq!( split_command(test_string1), vec!["Hallo,", "Marcel Davis 1&1."] ); let test_string2 = "Leiter1 23für Kundenzufriedenheit."; assert_eq!( split_command(test_string2), vec!["Leiter1", "23für Kundenzufriedenheit."] ); let test_string3 = "Wir# $%gehen erst wieder, wenn ihre Leitung läuft!"; assert_eq!( split_command(test_string3), vec!["Wir#", "$%gehen erst wieder, wenn ihre Leitung läuft!"] ); } #[test] fn test_split_command_empty() { assert_eq!(split_command(""), vec!["", ""]); } #[test] fn test_split_command_only_space() { assert_eq!(split_command(" "), vec!["", ""]); } }