matrix-bot/src/commands/mod.rs

60 lines
1.4 KiB
Rust

use std::fmt::Display;
use std::str::FromStr;
use enum_iterator::IntoEnumIterator;
macro_rules! import_command {
($( $command:tt ),* $(,)?) => {
$(
mod $command;
pub use $command::$command;
)*
};
}
import_command!(help, ping, source, uwuify);
#[derive(IntoEnumIterator)]
pub enum BotCommand {
Help,
Source,
Uwu,
Ping,
}
impl BotCommand {
pub const fn help_text(&self) -> &'static str {
match self {
Self::Source => "Links to the source code for this bot.",
Self::Uwu => "Uwuifies your message.",
Self::Ping => "Pong!",
Self::Help => "Prints this help.",
}
}
}
impl FromStr for BotCommand {
type Err = ();
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"source" => Ok(Self::Source),
"uwu" => Ok(Self::Uwu),
"ping" => Ok(Self::Ping),
"help" => Ok(Self::Help),
_ => Err(()),
}
}
}
impl Display for BotCommand {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
BotCommand::Source => write!(f, "source"),
BotCommand::Uwu => write!(f, "uwu"),
BotCommand::Ping => write!(f, "ping"),
BotCommand::Help => write!(f, "help"),
}
}
}