aboutsummaryrefslogtreecommitdiff
path: root/src/persist.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-04-04 01:50:34 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-04-04 01:50:34 +0300
commit831894facfc1339f819b42c3339668154121d24f (patch)
tree3a49bad36a65341f6296b9f3d568317e15b6c21a /src/persist.rs
parente0fb8ca6fa55acaa72902a15c5468cbe2787ddf7 (diff)
refactor: make workspace api ids stable
Diffstat (limited to 'src/persist.rs')
-rw-r--r--src/persist.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/persist.rs b/src/persist.rs
index fb8ab2d8..3b181b06 100644
--- a/src/persist.rs
+++ b/src/persist.rs
@@ -35,6 +35,8 @@ pub struct SessionSnapshot {
#[derive(Serialize)]
pub struct WorkspaceSnapshot {
#[serde(default)]
+ pub id: Option<String>,
+ #[serde(default)]
pub custom_name: Option<String>,
pub identity_cwd: PathBuf,
pub tabs: Vec<TabSnapshot>,
@@ -45,6 +47,8 @@ pub struct WorkspaceSnapshot {
#[derive(Deserialize)]
struct WorkspaceSnapshotWire {
#[serde(default)]
+ id: Option<String>,
+ #[serde(default)]
custom_name: Option<String>,
#[serde(default)]
identity_cwd: Option<PathBuf>,
@@ -126,6 +130,7 @@ impl From<LegacyWorkspaceSnapshot> 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")