From 866aaf740e10fcfce169aaf81380ea0257fbe272 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Thu, 21 May 2026 20:19:54 +0300 Subject: refactor: separate server client boundaries --- src/cli/pane.rs | 410 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 410 insertions(+) create mode 100644 src/cli/pane.rs (limited to 'src/cli/pane.rs') diff --git a/src/cli/pane.rs b/src/cli/pane.rs new file mode 100644 index 00000000..58d65af6 --- /dev/null +++ b/src/cli/pane.rs @@ -0,0 +1,410 @@ +use crate::api::schema::{ + Method, PaneListParams, PaneReadParams, PaneRenameParams, PaneReportAgentParams, + PaneSendInputParams, PaneSendKeysParams, PaneSendTextParams, PaneSplitParams, PaneTarget, + ReadFormat, ReadSource, Request, +}; + +pub(super) fn run_pane_command(args: &[String]) -> std::io::Result { + let Some(subcommand) = args.first().map(|arg| arg.as_str()) else { + print_pane_help(); + return Ok(2); + }; + + match subcommand { + "list" => pane_list(&args[1..]), + "get" => pane_get(&args[1..]), + "read" => pane_read(&args[1..]), + "rename" => pane_rename(&args[1..]), + "split" => pane_split(&args[1..]), + "close" => pane_close(&args[1..]), + "send-text" => pane_send_text(&args[1..]), + "send-keys" => pane_send_keys(&args[1..]), + "report-agent" => pane_report_agent(&args[1..]), + "run" => pane_run(&args[1..]), + "help" | "--help" | "-h" => { + print_pane_help(); + Ok(0) + } + _ => { + print_pane_help(); + Ok(2) + } + } +} + +fn pane_list(args: &[String]) -> std::io::Result { + let mut workspace_id = None; + + let mut index = 0; + while index < args.len() { + match args[index].as_str() { + "--workspace" => { + let Some(value) = args.get(index + 1) else { + eprintln!("missing value for --workspace"); + return Ok(2); + }; + workspace_id = Some(super::normalize_workspace_id(value)); + index += 2; + } + other => { + eprintln!("unknown option: {other}"); + return Ok(2); + } + } + } + + super::print_response(&super::send_request(&Request { + id: "cli:pane:list".into(), + method: Method::PaneList(PaneListParams { workspace_id }), + })?) +} + +fn pane_get(args: &[String]) -> std::io::Result { + let Some(raw_pane_id) = args.first() else { + eprintln!("usage: herdr pane get "); + return Ok(2); + }; + if args.len() != 1 { + eprintln!("usage: herdr pane get "); + return Ok(2); + } + + super::print_response(&super::send_request(&Request { + id: "cli:pane:get".into(), + method: Method::PaneGet(PaneTarget { + pane_id: super::normalize_pane_id(raw_pane_id), + }), + })?) +} + +fn pane_rename(args: &[String]) -> std::io::Result { + let Some(raw_pane_id) = args.first() else { + eprintln!("usage: herdr pane rename