diff options
Diffstat (limited to 'src/api/schema')
| -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 |
3 files changed, 36 insertions, 2 deletions
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 + ); +} |
