diff options
Diffstat (limited to 'src/agenda.rs')
| -rw-r--r-- | src/agenda.rs | 31 |
1 files changed, 21 insertions, 10 deletions
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<F>( message: &str, sender: &str, + send_message: F, point_sender: &mpsc::UnboundedSender<AgendaPoint> -) -> Result<Option<String>, ParseError> { +) -> Option<Emoji> 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::<Vec<_>>() - .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) } } |
