use super::{ VerbContext, UserVerb, UserVerbRef, UResult, CommandHandlingError::UserError }; use async_trait::async_trait; use ansi_macro::ansi; use phf::phf_map; static HELP_PAGES: phf::Map<&'static str, &'static str> = phf_map! { "" => ansi!("Type help topicname> to learn about a topic. Most \ commands can be used as a topicname.\r\n\ Topics of interest to new users:\r\n\ \tregister\tLearn about the register command.\r\n\ \tnewbie\tLearn how to survive as a newb."), "" => ansi!("You are supposed to replace topicname> with the topic you want \ to learn about. Example:\r\n\ \thelp register will tell you about the register command.") }; pub struct Verb; #[async_trait] impl UserVerb for Verb { async fn handle(self: &Self, ctx: &VerbContext, _verb: &str, remaining: &str) -> UResult<()> { let help = HELP_PAGES.get(remaining).ok_or( UserError("No help available on that".to_string()))?; ctx.pool.queue_for_session(ctx.session, &(help.to_string() + "\r\n")).await?; Ok(()) } } static VERB_INT: Verb = Verb; pub static VERB: UserVerbRef = &VERB_INT as UserVerbRef;