From 4568425fadb92788ecacd57560227a63b5610376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Wed, 18 Nov 2020 11:30:05 +0100 Subject: parse_message takes a closure --- src/agenda.rs | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'src/agenda.rs') diff --git a/src/agenda.rs b/src/agenda.rs index c046f3f..dc57775 100644 --- a/src/agenda.rs +++ b/src/agenda.rs @@ -39,15 +39,18 @@ impl Agenda { } } -pub enum ParseError { - NoSuchCommand, +pub enum Emoji { + Ok, + Confused, + Err, } -pub fn parse_message( +pub fn parse_message( message: &str, sender: &str, + send_message: F, point_sender: &mpsc::UnboundedSender -) -> Result, ParseError> { +) -> Option where F: FnOnce(String) { if message.starts_with("!add ") { let mut agenda = read_agenda(); let agenda_point = AgendaPoint { @@ -57,23 +60,31 @@ pub fn parse_message( point_sender.send(agenda_point.clone()).unwrap(); agenda.points.push(agenda_point); agenda.write(); - Ok(None) + Some(Emoji::Ok) } else if message.starts_with("!agenda") { - Ok(Some(read_agenda() + let s = read_agenda() .points .iter() .map(|p| p.to_string()) .collect::>() - .join("\n"))) + .join("\n"); + send_message(match s.as_str() { + "" => "Agenda is empty".to_string(), + _ => s + }); + None } else if message.starts_with("!clear") { Agenda { points: Vec::new(), }.write(); - Ok(None) + Some(Emoji::Ok) } else if message.starts_with("!help") { - Ok(Some("Available commands:\n```!add -- Add something\n!agenda -- Print the agenda\n!clear -- Remove all items\n!help```".to_string())) + send_message("Available commands:\n```!add -- Add something\n!agenda -- Print the agenda\n!clear -- Remove all items\n!help```".to_string()); + None + } else if message.starts_with("!") { + Some(Emoji::Confused) } else { - Err(ParseError::NoSuchCommand) + Some(Emoji::Err) } } -- cgit v1.2.1