diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2020-11-11 17:31:23 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2020-11-11 17:31:23 +0100 |
| commit | 6fbdede8516e6d35afbd032a2ca6fc6ef109b484 (patch) | |
| tree | a89d445e7b4f6fa30347193a562710f81ed36e40 /src/agenda.rs | |
| parent | f0f616b94ec1778e7f7b84db0a368ea83438faaa (diff) | |
| download | kodapa-6fbdede8516e6d35afbd032a2ca6fc6ef109b484.tar.gz | |
send AgendaPoint instead of String between services
Diffstat (limited to 'src/agenda.rs')
| -rw-r--r-- | src/agenda.rs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/agenda.rs b/src/agenda.rs new file mode 100644 index 0000000..3cfcfb7 --- /dev/null +++ b/src/agenda.rs @@ -0,0 +1,50 @@ +use serde::{ + Deserialize, + Serialize, +}; +use std::{ + fmt, + fs, +}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct AgendaPoint { + pub title: String, + pub adder: String, +} + +impl fmt::Display for AgendaPoint { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "{} ({})", self.title, self.adder) + } +} + +impl AgendaPoint { + pub fn to_add_message(&self) -> String { + format!("'{}' added by {}", self.title, self.adder) + } +} + +#[derive(Deserialize, Serialize)] +pub struct Agenda { + points: Vec<AgendaPoint>, +} + +pub fn read_agenda() -> Agenda { + serde_json::from_str::<Agenda>( + &fs::read_to_string("agenda.json") + .expect("Can't read agenda.json")) + .expect("Error parsing agenda.json") +} + +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 add_point(point: AgendaPoint) { + let mut agenda = read_agenda(); + agenda.points.push(point); + write_agenda(agenda); +} |
