From 80367281522ca4f261bc1086cf9566b01a4bef4c Mon Sep 17 00:00:00 2001 From: electria Date: Thu, 25 Jun 2026 18:34:14 -0700 Subject: [PATCH] feat: persist notes --- src/data.rs | 7 +++++++ src/main.rs | 20 +++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/data.rs b/src/data.rs index 5196a24..6f05c75 100644 --- a/src/data.rs +++ b/src/data.rs @@ -1,5 +1,12 @@ use serde::{Deserialize, Serialize}; +/// persistent data of the app; created when loading or saving +#[derive(Clone, Debug, Default, Deserialize, Serialize)] +pub struct Saved { + pub table: Table, + pub notes: String, +} + pub type Table = Vec; #[derive(Clone, Debug, Default, Deserialize, Serialize)] diff --git a/src/main.rs b/src/main.rs index 792773b..df408aa 100644 --- a/src/main.rs +++ b/src/main.rs @@ -59,9 +59,17 @@ impl State { fn new() -> Self { let mut state = Self::default(); if let Ok(file) = - fs::File::open(data!()).inspect_err(|e| eprintln!("failed to read data file: {e}")) + fs::File::open(data!()).inspect_err(|e| eprintln!("failed to open data file: {e}")) { - state.table = ron::de::from_reader(file).unwrap(); + if let Ok(saved) = ron::de::from_reader::<_, data::Saved>(&file) + .inspect_err(|e| eprintln!("failed to read current version of data file: {e}, trying to restore old version")) + { + state.table = saved.table; + state.content = widget::text_editor::Content::with_text(&saved.notes); + } else { + // try to read it as an older version on error + state.table = ron::de::from_reader(&file).unwrap(); + } } state @@ -229,7 +237,13 @@ impl State { impl Drop for State { fn drop(&mut self) { ron::Options::default() - .to_io_writer(fs::File::create(data!()).unwrap(), &self.table) + .to_io_writer( + fs::File::create(data!()).unwrap(), + &data::Saved { + table: self.table.clone(), + notes: self.content.text(), + }, + ) .unwrap(); } }