From 831894facfc1339f819b42c3339668154121d24f Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sat, 4 Apr 2026 01:50:34 +0300 Subject: refactor: make workspace api ids stable --- src/persist.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/persist.rs') diff --git a/src/persist.rs b/src/persist.rs index fb8ab2d8..3b181b06 100644 --- a/src/persist.rs +++ b/src/persist.rs @@ -34,6 +34,8 @@ pub struct SessionSnapshot { #[derive(Serialize)] pub struct WorkspaceSnapshot { + #[serde(default)] + pub id: Option, #[serde(default)] pub custom_name: Option, pub identity_cwd: PathBuf, @@ -44,6 +46,8 @@ pub struct WorkspaceSnapshot { #[derive(Deserialize)] struct WorkspaceSnapshotWire { + #[serde(default)] + id: Option, #[serde(default)] custom_name: Option, #[serde(default)] @@ -126,6 +130,7 @@ impl From for WorkspaceSnapshot { }; Self { + id: None, custom_name: snap.custom_name, identity_cwd, tabs: vec![tab], @@ -143,6 +148,7 @@ impl<'de> Deserialize<'de> for WorkspaceSnapshot { if let Some(identity_cwd) = snap.identity_cwd { return Ok(Self { + id: snap.id, custom_name: snap.custom_name, identity_cwd, tabs: snap.tabs, @@ -220,6 +226,7 @@ pub fn capture( fn capture_workspace(ws: &Workspace) -> WorkspaceSnapshot { WorkspaceSnapshot { + id: Some(ws.id.clone()), custom_name: ws.custom_name.clone(), identity_cwd: ws .resolved_identity_cwd() @@ -328,6 +335,10 @@ fn restore_workspace( } Some(Workspace { + id: snap + .id + .clone() + .unwrap_or_else(crate::workspace::generate_workspace_id), custom_name: snap.custom_name.clone(), identity_cwd: snap.identity_cwd.clone(), cached_git_ahead_behind: None, @@ -592,6 +603,7 @@ mod tests { let snap = SessionSnapshot { workspaces: vec![WorkspaceSnapshot { + id: Some("wproj".to_string()), custom_name: Some("pi-mono".to_string()), identity_cwd: PathBuf::from("/home/can/Projects/herdr"), tabs: vec![TabSnapshot { @@ -618,6 +630,7 @@ mod tests { let restored: SessionSnapshot = serde_json::from_str(&json).unwrap(); assert_eq!(restored.workspaces.len(), 1); + assert_eq!(restored.workspaces[0].id.as_deref(), Some("wproj")); assert_eq!( restored.workspaces[0].custom_name.as_deref(), Some("pi-mono") -- cgit v1.2.3