Skip to content

Commit 75eb7d6

Browse files
committed
Editor: Actually save/load app state (drop active package)
1 parent 4986ae8 commit 75eb7d6

2 files changed

Lines changed: 27 additions & 14 deletions

File tree

crates/opensi-editor/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ thiserror = "2.0.11"
2929
serde = { version = "1", features = ["derive"] }
3030
itertools = "0.14.0"
3131
const_format = "0.2.34"
32-
bincode = "1.3.3"
3332
log = "0.4"
3433
dashmap = "6.1.0"
3534

crates/opensi-editor/src/app/mod.rs

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ pub const FONT_BOLD_ID: &'static str = "bold";
2626
#[derive(serde::Deserialize, serde::Serialize, Debug)]
2727
#[serde(default)]
2828
pub struct EditorApp {
29-
package_state: PackageState,
3029
theme_name: String,
3130
show_tree: bool,
3231
show_properties: bool,
3332
recent_files: BTreeSet<PathBuf>,
3433
#[serde(skip)]
34+
package_state: PackageState,
35+
#[serde(skip)]
3536
storage: SharedPackageBytesStorage,
3637
}
3738

@@ -54,9 +55,7 @@ impl EditorApp {
5455
// Load previous app state (if any).
5556
// Note that you must enable the `persistence` feature for this to work.
5657
let mut app: Self = if let Some(storage) = cc.storage {
57-
eframe::get_value::<Vec<u8>>(storage, eframe::APP_KEY)
58-
.and_then(|binary| bincode::deserialize(&binary).ok())
59-
.unwrap_or_default()
58+
eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default()
6059
} else {
6160
Default::default()
6261
};
@@ -100,12 +99,7 @@ impl EditorApp {
10099
impl eframe::App for EditorApp {
101100
/// Called by the frame work to save state before shutdown.
102101
fn save(&mut self, storage: &mut dyn eframe::Storage) {
103-
match bincode::serialize(self) {
104-
Ok(binary) => {
105-
eframe::set_value(storage, eframe::APP_KEY, &binary);
106-
},
107-
Err(err) => error!("Unable to bincode app state: {err}"),
108-
}
102+
eframe::set_value(storage, eframe::APP_KEY, self);
109103
}
110104

111105
fn update(&mut self, ctx: &egui::Context, frame: &mut eframe::Frame) {
@@ -334,18 +328,38 @@ impl eframe::App for EditorApp {
334328
}
335329
}
336330

337-
#[derive(serde::Deserialize, serde::Serialize, Default, Debug)]
331+
#[derive(Default, Debug)]
338332
enum PackageState {
339333
#[default]
340334
None,
341-
#[serde(skip)]
342-
Loading(LoadingPackageReceiver),
343335
Active {
336+
// #[serde(with = "package_state_serde")]
344337
package: Package,
345338
selected: Option<PackageNode>,
346339
},
340+
Loading(LoadingPackageReceiver),
347341
}
348342

343+
// mod package_state_serde {
344+
// use opensi_core::prelude::Package;
345+
// use serde::{Deserialize, Serialize};
346+
347+
// pub fn deserialize<'de, D: serde::Deserializer<'de>>(
348+
// deserializer: D,
349+
// ) -> Result<Package, D::Error> {
350+
// let buffer = Vec::<u8>::deserialize(deserializer)?;
351+
// Package::from_zip_buffer(buffer).map_err(serde::de::Error::custom)
352+
// }
353+
354+
// pub fn serialize<S: serde::Serializer>(
355+
// data: &Package,
356+
// serializer: S,
357+
// ) -> Result<S::Ok, S::Error> {
358+
// let buffer = data.to_bytes().map_err(serde::ser::Error::custom)?;
359+
// buffer.serialize(serializer)
360+
// }
361+
// }
362+
349363
#[derive(Clone, Default, Debug)]
350364
pub struct SharedPackageBytesStorage {
351365
cache: Arc<dashmap::DashMap<String, egui::load::Bytes>>,

0 commit comments

Comments
 (0)