diff options
Diffstat (limited to 'src/api/schema')
| -rw-r--r-- | src/api/schema/events.rs | 12 | ||||
| -rw-r--r-- | src/api/schema/tests.rs | 22 | ||||
| -rw-r--r-- | src/api/schema/workspaces.rs | 7 |
3 files changed, 41 insertions, 0 deletions
diff --git a/src/api/schema/events.rs b/src/api/schema/events.rs index 50b5d522..52ac6c96 100644 --- a/src/api/schema/events.rs +++ b/src/api/schema/events.rs @@ -26,6 +26,8 @@ pub enum Subscription { WorkspaceRenamed {}, #[serde(rename = "workspace.moved")] WorkspaceMoved {}, + #[serde(rename = "workspace.reordered")] + WorkspaceReordered {}, #[serde(rename = "workspace.closed")] WorkspaceClosed {}, #[serde(rename = "workspace.focused")] @@ -196,6 +198,7 @@ pub enum EventKind { WorkspaceClosed, WorkspaceRenamed, WorkspaceMoved, + WorkspaceReordered, WorkspaceFocused, WorktreeCreated, WorktreeOpened, @@ -226,6 +229,7 @@ impl EventKind { EventKind::WorkspaceClosed => "workspace.closed", EventKind::WorkspaceRenamed => "workspace.renamed", EventKind::WorkspaceMoved => "workspace.moved", + EventKind::WorkspaceReordered => "workspace.reordered", EventKind::WorkspaceFocused => "workspace.focused", EventKind::WorktreeCreated => "worktree.created", EventKind::WorktreeOpened => "worktree.opened", @@ -257,6 +261,7 @@ pub const KNOWN_EVENT_KINDS: &[EventKind] = &[ EventKind::WorkspaceClosed, EventKind::WorkspaceRenamed, EventKind::WorkspaceMoved, + EventKind::WorkspaceReordered, EventKind::WorkspaceFocused, EventKind::WorktreeCreated, EventKind::WorktreeOpened, @@ -284,6 +289,7 @@ pub const PLUGIN_HOOK_EVENT_KINDS: &[EventKind] = &[ EventKind::WorkspaceClosed, EventKind::WorkspaceRenamed, EventKind::WorkspaceMoved, + EventKind::WorkspaceReordered, EventKind::WorkspaceFocused, EventKind::WorktreeCreated, EventKind::WorktreeOpened, @@ -437,6 +443,12 @@ pub enum EventData { insert_index: usize, workspaces: Vec<WorkspaceInfo>, }, + WorkspaceReordered { + workspace_ids: Vec<String>, + #[serde(default, skip_serializing_if = "Option::is_none")] + before_workspace_id: Option<String>, + workspaces: Vec<WorkspaceInfo>, + }, WorkspaceFocused { workspace_id: String, }, diff --git a/src/api/schema/tests.rs b/src/api/schema/tests.rs index 9fcc03b0..16894dbf 100644 --- a/src/api/schema/tests.rs +++ b/src/api/schema/tests.rs @@ -470,6 +470,14 @@ fn event_envelope_round_trips() { }, }, EventEnvelope { + event: EventKind::WorkspaceReordered, + data: EventData::WorkspaceReordered { + workspace_ids: vec!["w_1".into(), "w_2".into()], + before_workspace_id: Some("w_3".into()), + workspaces: vec![], + }, + }, + EventEnvelope { event: EventKind::TabMoved, data: EventData::TabMoved { tab_id: "w_1:1".into(), @@ -1063,6 +1071,18 @@ fn authority_mutation_requests_round_trip() { let restored: Request = serde_json::from_value(json).unwrap(); assert_eq!(restored, workspace_move); + let workspace_move_block = Request { + id: "move_ws_block".into(), + method: Method::WorkspaceMoveBlock(WorkspaceMoveBlockParams { + workspace_ids: vec!["w1".into(), "w2".into()], + before_workspace_id: Some("w3".into()), + }), + }; + let json = serde_json::to_value(&workspace_move_block).unwrap(); + assert_eq!(json["method"], "workspace.move_block"); + let restored: Request = serde_json::from_value(json).unwrap(); + assert_eq!(restored, workspace_move_block); + let tab_move = Request { id: "move_tab".into(), method: Method::TabMove(TabMoveParams { @@ -1105,6 +1125,7 @@ fn authority_mutation_requests_round_trip() { method: Method::EventsSubscribe(EventsSubscribeParams { subscriptions: vec![ Subscription::WorkspaceMoved {}, + Subscription::WorkspaceReordered {}, Subscription::TabMoved {}, Subscription::LayoutUpdated {}, ], @@ -1112,6 +1133,7 @@ fn authority_mutation_requests_round_trip() { }; let json = serde_json::to_string(&subscription).unwrap(); assert!(json.contains("\"type\":\"workspace.moved\"")); + assert!(json.contains("\"type\":\"workspace.reordered\"")); assert!(json.contains("\"type\":\"tab.moved\"")); assert!(json.contains("\"type\":\"layout.updated\"")); let restored: Request = serde_json::from_str(&json).unwrap(); diff --git a/src/api/schema/workspaces.rs b/src/api/schema/workspaces.rs index a6177982..f9ad4ced 100644 --- a/src/api/schema/workspaces.rs +++ b/src/api/schema/workspaces.rs @@ -29,6 +29,13 @@ pub struct WorkspaceMoveParams { } #[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] +pub struct WorkspaceMoveBlockParams { + pub workspace_ids: Vec<String>, + #[serde(default, skip_serializing_if = "Option::is_none")] + pub before_workspace_id: Option<String>, +} + +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] pub struct WorkspaceReportMetadataParams { pub workspace_id: String, pub source: String, |
