From 3b75792081e11cfeb334b45dfb41027532a8848e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Fri, 13 Nov 2020 00:59:32 +0100 Subject: basic commands and write agenda to file --- src/agenda.rs | 58 +++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 43 insertions(+), 15 deletions(-) (limited to 'src/agenda.rs') diff --git a/src/agenda.rs b/src/agenda.rs index 3cfcfb7..39b07a7 100644 --- a/src/agenda.rs +++ b/src/agenda.rs @@ -9,8 +9,8 @@ use std::{ #[derive(Debug, Deserialize, Serialize)] pub struct AgendaPoint { - pub title: String, - pub adder: String, + title: String, + adder: String, } impl fmt::Display for AgendaPoint { @@ -30,21 +30,49 @@ pub struct Agenda { points: Vec, } -pub fn read_agenda() -> Agenda { - serde_json::from_str::( - &fs::read_to_string("agenda.json") - .expect("Can't read agenda.json")) - .expect("Error parsing agenda.json") +impl Agenda { + fn write(&self) { + fs::write(std::path::Path::new("agenda.json"), + serde_json::to_string_pretty(&self).expect("Can't serialize agenda")) + .expect("Can't write agenda.json"); + } +} + +pub enum ParseError { + NoSuchCommand, } -pub fn write_agenda(agenda: Agenda) { - fs::write(std::path::Path::new("agenda.json"), - serde_json::to_string_pretty(&agenda).expect("Can't serialize agenda")) - .expect("Can't write agenda.json"); +pub fn parse_message(message: &str, sender: &str) -> Result, ParseError> { + if message.starts_with("!add ") { + let mut agenda = read_agenda(); + agenda.points.push(AgendaPoint { + title: message[5..].to_string(), + adder: sender.to_string(), + }); + agenda.write(); + Ok(None) + } else if message.starts_with("!agenda") { + Ok(Some(read_agenda() + .points + .iter() + .map(|p| p.to_string()) + .collect::>() + .join("\n"))) + } else if message.starts_with("!clear") { + Agenda { + points: Vec::new(), + }.write(); + Ok(None) + } else if message.starts_with("!help") { + Ok(Some("Available commands:\n !add\n !agenda\n !clear\n !help".to_string())) + } else { + Err(ParseError::NoSuchCommand) + } } -pub fn add_point(point: AgendaPoint) { - let mut agenda = read_agenda(); - agenda.points.push(point); - write_agenda(agenda); +fn read_agenda() -> Agenda { + serde_json::from_str::( + &fs::read_to_string("agenda.json") + .expect("Can't read agenda.json")) + .expect("Error parsing agenda.json") } -- cgit v1.2.1