From eecea9c38c905a6c9a0af6973e03d734e2156179 Mon Sep 17 00:00:00 2001 From: Vassiliy Yegorov Date: Mon, 15 Jun 2026 16:03:03 +0700 Subject: [PATCH] feat(proto): RestartSurface gains resume flag (defaults false) --- crates/spacesh-proto/src/message.rs | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/spacesh-proto/src/message.rs b/crates/spacesh-proto/src/message.rs index 4ef4443..a5cc74b 100644 --- a/crates/spacesh-proto/src/message.rs +++ b/crates/spacesh-proto/src/message.rs @@ -92,7 +92,11 @@ pub enum Cmd { SetRatios { workspace_id: WorkspaceId, node_path: Vec, ratios: Vec }, MoveSurface { surface_id: SurfaceId, target_surface_id: SurfaceId, edge: Edge }, ApplyPreset { workspace_id: WorkspaceId, preset_id: String, slots: Vec }, - RestartSurface { surface_id: SurfaceId }, + RestartSurface { + surface_id: SurfaceId, + #[serde(default)] + resume: bool, + }, CloseWorkspace { workspace_id: WorkspaceId }, SetWorkspaceMeta { workspace_id: WorkspaceId, @@ -368,6 +372,21 @@ mod tests { assert_eq!(back, env); } + #[test] + fn restart_surface_resume_defaults_false_and_round_trips() { + // Legacy frame without `resume` decodes to false. + let legacy = r#"{"kind":"req","id":5,"cmd":{"cmd":"restart_surface","args":{"surface_id":"s_1"}}}"#; + let env: Envelope = serde_json::from_str(legacy).unwrap(); + match env { + Envelope::Req { cmd: Cmd::RestartSurface { resume, .. }, .. } => assert!(!resume), + _ => panic!("wrong variant"), + } + // resume=true round-trips. + let e = Envelope::Req { id: 6, cmd: Cmd::RestartSurface { surface_id: SurfaceId("s_1".into()), resume: true } }; + let back: Envelope = serde_json::from_str(&serde_json::to_string(&e).unwrap()).unwrap(); + assert_eq!(back, e); + } + #[test] fn event_log_cmd_no_limit_round_trips() { let env = Envelope::Req { id: 9, cmd: Cmd::EventLog { limit: None } };