aboutsummaryrefslogtreecommitdiff
path: root/src/api/schema
diff options
context:
space:
mode:
Diffstat (limited to 'src/api/schema')
-rw-r--r--src/api/schema/events.rs12
-rw-r--r--src/api/schema/tests.rs22
-rw-r--r--src/api/schema/workspaces.rs7
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,