aboutsummaryrefslogtreecommitdiffstats
path: root/src/agenda.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/agenda.rs')
-rw-r--r--src/agenda.rs31
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)
}
}