command.rs 673 B

123456789101112131415161718192021222324252627
  1. use crate::token::{Error, Token, Tokenizer};
  2. pub fn find_commmand_start(input: &str, bot: &str) -> Option<usize> {
  3. input.find(&format!("@{}", bot))
  4. }
  5. #[derive(Debug)]
  6. pub enum Command {
  7. Label(label::LabelCommand),
  8. }
  9. pub fn parse_command<'a>(input: &'a str, bot: &str) -> Result<Option<Command>, Error<'a>> {
  10. let start = match find_commmand_start(input, bot) {
  11. Some(pos) => pos,
  12. None => return Ok(None),
  13. };
  14. let input = &input[start..];
  15. let mut tok = Tokenizer::new(input);
  16. assert_eq!(
  17. tok.next_token().unwrap(),
  18. Some(Token::Word(&format!("@{}", bot)))
  19. );
  20. let cmd = Command::Label;
  21. Ok(Some(cmd))
  22. }