diff options
Diffstat (limited to 'src/api')
| -rw-r--r-- | src/api/schema.rs | 2 | ||||
| -rw-r--r-- | src/api/schema/panes.rs | 8 | ||||
| -rw-r--r-- | src/api/schema/response.rs | 3 | ||||
| -rw-r--r-- | src/api/schema/tests.rs | 27 | ||||
| -rw-r--r-- | src/api/server.rs | 1 |
5 files changed, 39 insertions, 2 deletions
diff --git a/src/api/schema.rs b/src/api/schema.rs index ba9f0c3a..7c58fb69 100644 --- a/src/api/schema.rs +++ b/src/api/schema.rs @@ -185,6 +185,8 @@ pub enum Method { PaneInputSet(PaneInputSetParams), #[serde(rename = "pane.link.activate")] PaneLinkActivate(PaneLinkActivateParams), + #[serde(rename = "pane.link.resolve")] + PaneLinkResolve(PaneLinkActivateParams), #[serde(rename = "pane.rename")] PaneRename(PaneRenameParams), #[serde(rename = "pane.send_text")] diff --git a/src/api/schema/panes.rs b/src/api/schema/panes.rs index 517870f7..6cbcaf43 100644 --- a/src/api/schema/panes.rs +++ b/src/api/schema/panes.rs @@ -762,3 +762,11 @@ pub struct PaneReadResult { pub revision: u64, pub truncated: bool, } + +/// Inclusive display-cell columns on a pane's current viewport. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, schemars::JsonSchema)] +pub struct PaneLinkRegion { + pub row: u16, + pub start_col: u16, + pub end_col: u16, +} diff --git a/src/api/schema/response.rs b/src/api/schema/response.rs index e6d4de4d..5cc66bdc 100644 --- a/src/api/schema/response.rs +++ b/src/api/schema/response.rs @@ -274,6 +274,9 @@ pub enum ResponseResult { context: PluginInvocationContext, log: PluginCommandLogInfo, }, + PaneLinkResolved { + regions: Vec<super::panes::PaneLinkRegion>, + }, PaneLinkActivated { #[serde(default, skip_serializing_if = "Option::is_none")] url: Option<String>, diff --git a/src/api/schema/tests.rs b/src/api/schema/tests.rs index b566e8f6..d51c565d 100644 --- a/src/api/schema/tests.rs +++ b/src/api/schema/tests.rs @@ -201,8 +201,7 @@ fn generated_protocol_schema_artifact_is_current() { ) }); assert_eq!( - expected, - actual, + expected, actual, "generated API schema artifact is stale; run `HERDR_UPDATE_API_SCHEMA=1 just test-one generated_protocol_schema_artifact_is_current`" ); } @@ -1433,3 +1432,27 @@ fn popup_close_request_round_trips() { assert_eq!(json["method"], "popup.close"); assert_eq!(json["params"], serde_json::json!({})); } + +#[test] +fn pane_link_resolve_round_trips() { + let request: Request = serde_json::from_value(serde_json::json!({ + "id": "hover", "method": "pane.link.resolve", + "params": {"pane_id": "pane-1", "viewport_row": 2, "col": 3} + })) + .unwrap(); + assert!(matches!(request.method, Method::PaneLinkResolve(_))); + let result = ResponseResult::PaneLinkResolved { + regions: vec![PaneLinkRegion { + row: 2, + start_col: 3, + end_col: 9, + }], + }; + let json = serde_json::to_value(&result).unwrap(); + assert_eq!(json["type"], "pane_link_resolved"); + assert_eq!(json["regions"][0]["end_col"], 9); + assert_eq!( + serde_json::from_value::<ResponseResult>(json).unwrap(), + result + ); +} diff --git a/src/api/server.rs b/src/api/server.rs index b8ef7c38..ea7597e7 100644 --- a/src/api/server.rs +++ b/src/api/server.rs @@ -454,6 +454,7 @@ pub(crate) fn api_method_name(method: &Method) -> &'static str { Method::PaneFocus(_) => "pane.focus", Method::PaneInputSet(_) => "pane.input.set", Method::PaneLinkActivate(_) => "pane.link.activate", + Method::PaneLinkResolve(_) => "pane.link.resolve", Method::PaneRename(_) => "pane.rename", Method::PaneSendText(_) => "pane.send_text", Method::PaneSendKeys(_) => "pane.send_keys", |
