From 2c4da6fefeb13e40be3948dd24524b82adcac3df Mon Sep 17 00:00:00 2001 From: LLLL Colonq Date: Sun, 16 Feb 2025 04:46:35 -0500 Subject: Fix saves --- src/save.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/save.rs (limited to 'src/save.rs') diff --git a/src/save.rs b/src/save.rs new file mode 100644 index 0000000..0f0d20b --- /dev/null +++ b/src/save.rs @@ -0,0 +1,40 @@ +#[cfg(target_arch = "wasm32")] +pub fn save(id: &str, data: &W) where W: serde::Serialize { + let window = web_sys::window().expect("failed to get window object"); + let storage = window.local_storage() + .expect("failed to get local storage") + .expect("local storage not present"); + let key = format!("{}_save", id); + let val = serde_json::to_string(data).expect("failed to serialize save"); + storage.set_item(&key, &val).expect("failed to set save"); +} + +#[cfg(target_arch = "wasm32")] +pub fn load(id: &str) -> Option where W: serde::de::DeserializeOwned { + let window = web_sys::window().expect("failed to get window object"); + let storage = window.local_storage() + .expect("failed to get local storage") + .expect("local storage not present"); + let key = format!("{}_save", id); + let s = storage.get_item(&key).expect("failed to get save").expect("save not present"); + let mut cur = std::io::Cursor::new(s); + serde_json::from_reader(&mut cur).ok() +} + +#[cfg(not(target_arch = "wasm32"))] +pub fn save(id: &str, data: &W) where W: serde::Serialize { + let pd = directories::ProjectDirs::from("", "milkfat", id).expect("failed to get save directory"); + let _ = std::fs::create_dir_all(pd.data_dir()); + let path = pd.data_dir().join("teleia.save"); + let file = std::fs::File::create(&path).expect("failed to open save file"); + serde_json::to_writer(file, data).expect("failed to write save file"); +} + +#[cfg(not(target_arch = "wasm32"))] +pub fn load(id: &str) -> Option where W: serde::de::DeserializeOwned { + let pd = directories::ProjectDirs::from("", "milkfat", id).expect("failed to get save directory"); + let _ = std::fs::create_dir_all(pd.data_dir()); + let path = pd.data_dir().join("teleia.save"); + let file = std::fs::File::open(&path).ok()?; + serde_json::from_reader(file).ok() +} -- cgit v1.2.3