1use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6use crate::{
7 ControlModeRequest, HandshakeRequest, PaneTarget, PaneTargetRef, SdkWaitId, SdkWaitOwnerId,
8 SessionName, Target, WindowTarget,
9};
10
11#[path = "request/show.rs"]
12mod show;
13pub use show::ShowHooksRequest;
14pub use show::{ShowEnvironmentRequest, ShowOptionsRequest};
15
16#[path = "request/layout.rs"]
17mod layout;
18pub use layout::{
19 NextLayoutRequest, PreviousLayoutRequest, SelectCustomLayoutRequest, SelectLayoutRequest,
20 SelectLayoutTarget, SelectOldLayoutRequest, SpreadLayoutRequest,
21};
22
23#[path = "request/pane.rs"]
24mod pane;
25pub use pane::{
26 BreakPaneRequest, DisplayPanesRequest, JoinPaneRequest, KillPaneRequest, LastPaneRequest,
27 MovePaneRequest, PaneBroadcastInputRequest, PaneInputRequest, PaneKillRequest,
28 PaneOutputCursorRequest, PaneOutputSubscriptionStart, PaneResizeRequest, PaneRespawnRequest,
29 PaneSelectRequest, PaneSnapshotRefRequest, PaneSnapshotRequest, PaneSplitSize, PipePaneRequest,
30 ResizePaneRequest, RespawnPaneRequest, SelectPaneAdjacentRequest, SelectPaneDirection,
31 SelectPaneMarkRequest, SelectPaneRequest, SendKeysExtRequest, SendKeysRequest,
32 SplitWindowExtRequest, SplitWindowRequest, SplitWindowTarget, SubscribePaneOutputRefRequest,
33 SubscribePaneOutputRequest, SwapPaneDirection, SwapPaneRequest, UnsubscribePaneOutputRequest,
34};
35
36#[path = "request/window.rs"]
37mod window;
38pub use window::{
39 KillWindowRequest, LastWindowRequest, LinkWindowRequest, ListWindowsRequest, MoveWindowRequest,
40 MoveWindowTarget, NewWindowRequest, NextWindowRequest, PreviousWindowRequest,
41 RenameWindowRequest, ResizeWindowAdjustment, ResizeWindowRequest, RespawnWindowRequest,
42 RotateWindowDirection, RotateWindowRequest, SelectWindowRequest, SwapWindowRequest,
43};
44
45#[path = "request/target.rs"]
46mod target;
47pub use target::{ResolveTargetRequest, ResolveTargetType};
48
49#[path = "request/session.rs"]
50mod session;
51pub use session::{
52 CreateSessionLeaseRequest, HasSessionRequest, KillSessionRequest, ListSessionsRequest,
53 NewSessionExtRequest, NewSessionRequest, ReleaseSessionLeaseRequest, RenameSessionRequest,
54 RenewSessionLeaseRequest,
55};
56
57#[path = "request/server.rs"]
58mod server;
59pub use server::{
60 KillServerRequest, LockClientRequest, LockServerRequest, LockSessionRequest,
61 ServerAccessRequest,
62};
63
64#[path = "request/client.rs"]
65mod client;
66pub use client::{
67 AttachSessionExt2Request, AttachSessionExtRequest, AttachSessionRequest,
68 DetachClientExtRequest, DetachClientRequest, ListClientsRequest, RefreshClientRequest,
69 SuspendClientRequest, SwitchClientExt2Request, SwitchClientExt3Request, SwitchClientExtRequest,
70 SwitchClientRequest,
71};
72
73#[path = "request/keys.rs"]
74mod keys;
75pub use keys::{
76 BindKeyRequest, ClockModeRequest, CopyModeRequest, ListKeysRequest, SendPrefixRequest,
77 UnbindKeyRequest,
78};
79
80#[path = "request/options.rs"]
81mod options;
82pub use options::{
83 SetEnvironmentMode, SetEnvironmentRequest, SetHookMutationRequest, SetHookRequest,
84 SetOptionByNameRequest, SetOptionRequest,
85};
86
87#[path = "request/buffer.rs"]
88mod buffer;
89pub use buffer::{
90 CapturePaneRequest, ClearHistoryRequest, DeleteBufferRequest, ListBuffersRequest,
91 LoadBufferRequest, PasteBufferRequest, SaveBufferRequest, SetBufferRequest, ShowBufferRequest,
92};
93
94#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
97pub enum Request {
98 NewSession(NewSessionRequest),
100 HasSession(HasSessionRequest),
102 KillSession(KillSessionRequest),
104 NewWindow(NewWindowRequest),
106 KillWindow(KillWindowRequest),
108 SelectWindow(SelectWindowRequest),
110 RenameWindow(RenameWindowRequest),
112 NextWindow(NextWindowRequest),
114 PreviousWindow(PreviousWindowRequest),
116 LastWindow(LastWindowRequest),
118 ListWindows(ListWindowsRequest),
120 MoveWindow(MoveWindowRequest),
122 SwapWindow(SwapWindowRequest),
124 RotateWindow(RotateWindowRequest),
126 SplitWindow(SplitWindowRequest),
128 SwapPane(SwapPaneRequest),
130 LastPane(LastPaneRequest),
132 JoinPane(JoinPaneRequest),
134 BreakPane(BreakPaneRequest),
136 KillPane(KillPaneRequest),
138 SelectLayout(SelectLayoutRequest),
140 ResizePane(ResizePaneRequest),
142 DisplayPanes(DisplayPanesRequest),
144 SelectPane(SelectPaneRequest),
146 SelectPaneAdjacent(SelectPaneAdjacentRequest),
148 SendKeys(SendKeysRequest),
150 AttachSession(AttachSessionRequest),
152 SwitchClient(SwitchClientRequest),
154 DetachClient(DetachClientRequest),
156 SetOption(SetOptionRequest),
158 SetEnvironment(SetEnvironmentRequest),
160 SetHook(SetHookRequest),
162 NextLayout(NextLayoutRequest),
164 PreviousLayout(PreviousLayoutRequest),
166 ShowOptions(ShowOptionsRequest),
168 ShowEnvironment(ShowEnvironmentRequest),
170 SetBuffer(SetBufferRequest),
172 ShowBuffer(ShowBufferRequest),
174 PasteBuffer(PasteBufferRequest),
176 ListBuffers(ListBuffersRequest),
178 DeleteBuffer(DeleteBufferRequest),
180 LoadBuffer(LoadBufferRequest),
182 SaveBuffer(SaveBufferRequest),
184 CapturePane(CapturePaneRequest),
186 DisplayMessage(DisplayMessageRequest),
188 RunShell(RunShellRequest),
190 IfShell(IfShellRequest),
192 WaitFor(WaitForRequest),
194 RenameSession(RenameSessionRequest),
196 ListSessions(ListSessionsRequest),
198 ListPanes(ListPanesRequest),
200 SourceFile(SourceFileRequest),
202 SetOptionByName(SetOptionByNameRequest),
204 SetHookMutation(SetHookMutationRequest),
206 ShowHooks(ShowHooksRequest),
208 SendKeysExt(SendKeysExtRequest),
210 SwitchClientExt(SwitchClientExtRequest),
212 BindKey(BindKeyRequest),
214 UnbindKey(UnbindKeyRequest),
216 ListKeys(ListKeysRequest),
218 SendPrefix(SendPrefixRequest),
220 ClearHistory(ClearHistoryRequest),
222 CopyMode(CopyModeRequest),
224 ControlMode(ControlModeRequest),
226 ClockMode(ClockModeRequest),
228 ShowMessages(ShowMessagesRequest),
230 NewSessionExt(NewSessionExtRequest),
232 AttachSessionExt(AttachSessionExtRequest),
234 SwitchClientExt2(SwitchClientExt2Request),
236 SelectCustomLayout(SelectCustomLayoutRequest),
238 SelectOldLayout(SelectOldLayoutRequest),
240 SpreadLayout(SpreadLayoutRequest),
242 KillServer(KillServerRequest),
244 LockServer(LockServerRequest),
246 LockSession(LockSessionRequest),
248 LockClient(LockClientRequest),
250 ServerAccess(ServerAccessRequest),
252 RefreshClient(RefreshClientRequest),
254 ListClients(ListClientsRequest),
256 SuspendClient(SuspendClientRequest),
258 DetachClientExt(DetachClientExtRequest),
260 AttachSessionExt2(AttachSessionExt2Request),
262 SwitchClientExt3(SwitchClientExt3Request),
264 ResizeWindow(ResizeWindowRequest),
266 RespawnWindow(RespawnWindowRequest),
268 MovePane(MovePaneRequest),
270 PipePane(PipePaneRequest),
272 RespawnPane(RespawnPaneRequest),
274 LinkWindow(LinkWindowRequest),
276 UnlinkWindow(UnlinkWindowRequest),
278 SelectPaneMark(SelectPaneMarkRequest),
280 ResolveTarget(ResolveTargetRequest),
282 SplitWindowExt(SplitWindowExtRequest),
284 Handshake(HandshakeRequest),
286 PaneSnapshot(PaneSnapshotRequest),
288 SubscribePaneOutput(SubscribePaneOutputRequest),
290 UnsubscribePaneOutput(UnsubscribePaneOutputRequest),
292 PaneOutputCursor(PaneOutputCursorRequest),
294 SdkWaitForOutput(SdkWaitForOutputRequest),
296 CancelSdkWait(CancelSdkWaitRequest),
298 PaneInput(PaneInputRequest),
300 PaneResize(PaneResizeRequest),
302 PaneKill(PaneKillRequest),
304 PaneRespawn(PaneRespawnRequest),
306 PaneSnapshotRef(PaneSnapshotRefRequest),
308 PaneSelect(PaneSelectRequest),
310 PaneBroadcastInput(PaneBroadcastInputRequest),
312 CreateSessionLease(CreateSessionLeaseRequest),
314 RenewSessionLease(RenewSessionLeaseRequest),
316 ReleaseSessionLease(ReleaseSessionLeaseRequest),
318 SubscribePaneOutputRef(SubscribePaneOutputRefRequest),
320 SdkWaitForOutputRef(SdkWaitForOutputRefRequest),
322}
323
324impl Request {
325 #[must_use]
327 pub const fn command_name(&self) -> &'static str {
328 match self {
329 Self::NewSession(_) => "new-session",
330 Self::HasSession(_) => "has-session",
331 Self::KillSession(_) => "kill-session",
332 Self::NewWindow(_) => "new-window",
333 Self::KillWindow(_) => "kill-window",
334 Self::SelectWindow(_) => "select-window",
335 Self::RenameWindow(_) => "rename-window",
336 Self::NextWindow(_) => "next-window",
337 Self::PreviousWindow(_) => "previous-window",
338 Self::LastWindow(_) => "last-window",
339 Self::ListWindows(_) => "list-windows",
340 Self::LinkWindow(_) => "link-window",
341 Self::MoveWindow(_) => "move-window",
342 Self::SwapWindow(_) => "swap-window",
343 Self::RotateWindow(_) => "rotate-window",
344 Self::SplitWindow(_) | Self::SplitWindowExt(_) => "split-window",
345 Self::SwapPane(_) => "swap-pane",
346 Self::LastPane(_) => "last-pane",
347 Self::JoinPane(_) => "join-pane",
348 Self::BreakPane(_) => "break-pane",
349 Self::KillPane(_) => "kill-pane",
350 Self::SelectLayout(_) => "select-layout",
351 Self::ResizePane(_) => "resize-pane",
352 Self::DisplayPanes(_) => "display-panes",
353 Self::SelectPane(_) | Self::SelectPaneAdjacent(_) | Self::SelectPaneMark(_) => {
354 "select-pane"
355 }
356 Self::SendKeys(_) => "send-keys",
357 Self::AttachSession(_) => "attach-session",
358 Self::SwitchClient(_) => "switch-client",
359 Self::DetachClient(_) => "detach-client",
360 Self::SetOption(_) => "set-option",
361 Self::SetEnvironment(_) => "set-environment",
362 Self::SetHook(_) => "set-hook",
363 Self::NextLayout(_) => "next-layout",
364 Self::PreviousLayout(_) => "previous-layout",
365 Self::ShowOptions(_) => "show-options",
366 Self::ShowEnvironment(_) => "show-environment",
367 Self::SetBuffer(_) => "set-buffer",
368 Self::ShowBuffer(_) => "show-buffer",
369 Self::PasteBuffer(_) => "paste-buffer",
370 Self::ListBuffers(_) => "list-buffers",
371 Self::DeleteBuffer(_) => "delete-buffer",
372 Self::LoadBuffer(_) => "load-buffer",
373 Self::SaveBuffer(_) => "save-buffer",
374 Self::CapturePane(_) => "capture-pane",
375 Self::PaneSnapshot(_) => "pane-snapshot",
376 Self::SubscribePaneOutput(_) | Self::SubscribePaneOutputRef(_) => {
377 "subscribe-pane-output"
378 }
379 Self::UnsubscribePaneOutput(_) => "unsubscribe-pane-output",
380 Self::PaneOutputCursor(_) => "pane-output-cursor",
381 Self::SdkWaitForOutput(_) | Self::SdkWaitForOutputRef(_) => "sdk-wait-output",
382 Self::CancelSdkWait(_) => "cancel-sdk-wait",
383 Self::PaneInput(_) => "send-keys",
384 Self::PaneBroadcastInput(_) => "send-keys",
385 Self::CreateSessionLease(_) => "create-session-lease",
386 Self::RenewSessionLease(_) => "renew-session-lease",
387 Self::ReleaseSessionLease(_) => "release-session-lease",
388 Self::PaneResize(_) => "resize-pane",
389 Self::PaneKill(_) => "kill-pane",
390 Self::PaneRespawn(_) => "respawn-pane",
391 Self::PaneSnapshotRef(_) => "pane-snapshot",
392 Self::PaneSelect(_) => "select-pane",
393 Self::DisplayMessage(_) => "display-message",
394 Self::ResolveTarget(_) => "resolve-target",
395 Self::RunShell(_) => "run-shell",
396 Self::IfShell(_) => "if-shell",
397 Self::WaitFor(_) => "wait-for",
398 Self::RenameSession(_) => "rename-session",
399 Self::ListSessions(_) => "list-sessions",
400 Self::ListPanes(_) => "list-panes",
401 Self::SourceFile(_) => "source-file",
402 Self::UnlinkWindow(_) => "unlink-window",
403 Self::SetOptionByName(_) => "set-option",
404 Self::SetHookMutation(_) => "set-hook",
405 Self::ShowHooks(_) => "show-hooks",
406 Self::SendKeysExt(_) => "send-keys",
407 Self::SwitchClientExt(_) => "switch-client",
408 Self::BindKey(_) => "bind-key",
409 Self::UnbindKey(_) => "unbind-key",
410 Self::ListKeys(_) => "list-keys",
411 Self::SendPrefix(_) => "send-prefix",
412 Self::ClearHistory(_) => "clear-history",
413 Self::CopyMode(_) => "copy-mode",
414 Self::ControlMode(_) => "control-mode",
415 Self::ClockMode(_) => "clock-mode",
416 Self::ShowMessages(_) => "show-messages",
417 Self::NewSessionExt(_) => "new-session",
418 Self::AttachSessionExt(_) => "attach-session",
419 Self::SwitchClientExt2(_) => "switch-client",
420 Self::SelectCustomLayout(_) => "select-layout",
421 Self::SelectOldLayout(_) => "select-layout",
422 Self::SpreadLayout(_) => "select-layout",
423 Self::ResizeWindow(_) => "resize-window",
424 Self::RespawnWindow(_) => "respawn-window",
425 Self::MovePane(_) => "move-pane",
426 Self::PipePane(_) => "pipe-pane",
427 Self::RespawnPane(_) => "respawn-pane",
428 Self::KillServer(_) => "kill-server",
429 Self::LockServer(_) => "lock-server",
430 Self::LockSession(_) => "lock-session",
431 Self::LockClient(_) => "lock-client",
432 Self::ServerAccess(_) => "server-access",
433 Self::RefreshClient(_) => "refresh-client",
434 Self::ListClients(_) => "list-clients",
435 Self::SuspendClient(_) => "suspend-client",
436 Self::DetachClientExt(_) => "detach-client",
437 Self::AttachSessionExt2(_) => "attach-session",
438 Self::SwitchClientExt3(_) => "switch-client",
439 Self::Handshake(_) => "handshake",
440 }
441 }
442}
443
444#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
446pub struct DisplayMessageRequest {
447 pub target: Option<Target>,
449 pub print: bool,
451 pub message: Option<String>,
453}
454
455#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
457pub struct ShowMessagesRequest {
458 pub jobs: bool,
460 pub terminals: bool,
462 pub target_client: Option<String>,
464}
465
466#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
468pub struct RunShellRequest {
469 pub command: String,
471 pub background: bool,
473 #[serde(default)]
475 pub as_commands: bool,
476 #[serde(default)]
478 pub show_stderr: bool,
479 #[serde(default)]
481 pub delay_seconds: Option<RunShellDelaySeconds>,
482 #[serde(default)]
484 pub start_directory: Option<PathBuf>,
485 #[serde(default)]
487 pub target: Option<PaneTarget>,
488}
489
490#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
492pub struct RunShellDelaySeconds(pub f64);
493
494impl RunShellDelaySeconds {
495 #[must_use]
497 pub const fn as_secs_f64(self) -> f64 {
498 self.0
499 }
500}
501
502impl PartialEq for RunShellDelaySeconds {
503 fn eq(&self, other: &Self) -> bool {
504 self.0.to_bits() == other.0.to_bits()
505 }
506}
507
508impl Eq for RunShellDelaySeconds {}
509
510#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
512pub struct IfShellRequest {
513 pub condition: String,
515 pub format_mode: bool,
517 pub then_command: String,
519 pub else_command: Option<String>,
521 pub target: Option<Target>,
523 pub caller_cwd: Option<PathBuf>,
525 #[serde(default)]
527 pub background: bool,
528}
529
530#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
532pub struct SourceFileRequest {
533 pub paths: Vec<String>,
535 pub quiet: bool,
537 pub parse_only: bool,
539 pub verbose: bool,
541 pub expand_paths: bool,
543 pub target: Option<PaneTarget>,
545 pub caller_cwd: Option<PathBuf>,
547 pub stdin: Option<String>,
549}
550
551#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
553pub struct UnlinkWindowRequest {
554 pub target: WindowTarget,
556 #[serde(default)]
558 pub kill_if_last: bool,
559}
560
561#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
563pub enum WaitForMode {
564 Wait,
566 Signal,
568 Lock,
570 Unlock,
572}
573
574#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
576pub struct WaitForRequest {
577 pub channel: String,
579 pub mode: WaitForMode,
581}
582
583#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
590pub struct SdkWaitForOutputRequest {
591 pub owner_id: SdkWaitOwnerId,
593 pub wait_id: SdkWaitId,
595 pub target: PaneTarget,
597 pub bytes: Vec<u8>,
599 pub start: PaneOutputSubscriptionStart,
601}
602
603#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
605pub struct SdkWaitForOutputRefRequest {
606 pub owner_id: SdkWaitOwnerId,
608 pub wait_id: SdkWaitId,
610 pub target: PaneTargetRef,
612 pub bytes: Vec<u8>,
614 pub start: PaneOutputSubscriptionStart,
616}
617
618#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
620pub struct CancelSdkWaitRequest {
621 pub owner_id: SdkWaitOwnerId,
623 pub wait_id: SdkWaitId,
625}
626
627#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
629pub struct ListPanesRequest {
630 pub target: SessionName,
632 #[serde(default)]
634 pub target_window_index: Option<u32>,
635 pub format: Option<String>,
637}
638
639#[cfg(test)]
640#[path = "request/compat_tests.rs"]
641mod compat_tests;
642
643#[cfg(test)]
644mod tests {
645 use super::*;
646 use crate::{
647 OptionScopeSelector, PaneTarget, ScopeSelector, SelectPaneDirection, SetOptionMode,
648 SplitDirection,
649 };
650
651 fn alpha() -> SessionName {
652 SessionName::new("alpha").expect("valid session")
653 }
654
655 fn pane() -> PaneTarget {
656 PaneTarget::new(alpha(), 0)
657 }
658
659 #[test]
660 fn request_command_names_cover_extended_aliases_and_internal_tags() {
661 assert_eq!(
662 Request::NewSessionExt(NewSessionExtRequest {
663 session_name: None,
664 working_directory: None,
665 detached: true,
666 size: None,
667 environment: None,
668 group_target: None,
669 attach_if_exists: false,
670 detach_other_clients: false,
671 kill_other_clients: false,
672 flags: None,
673 window_name: None,
674 print_session_info: false,
675 print_format: None,
676 command: None,
677 process_command: None,
678 })
679 .command_name(),
680 "new-session"
681 );
682 assert_eq!(
683 Request::SplitWindowExt(SplitWindowExtRequest {
684 target: SplitWindowTarget::Pane(pane()),
685 direction: SplitDirection::Vertical,
686 before: false,
687 environment: None,
688 command: None,
689 process_command: None,
690 start_directory: None,
691 keep_alive_on_exit: None,
692 })
693 .command_name(),
694 "split-window"
695 );
696 assert_eq!(
697 Request::SelectPaneAdjacent(SelectPaneAdjacentRequest {
698 target: pane(),
699 direction: SelectPaneDirection::Right,
700 })
701 .command_name(),
702 "select-pane"
703 );
704 assert_eq!(
705 Request::SelectPaneMark(SelectPaneMarkRequest {
706 target: pane(),
707 clear: false,
708 title: None,
709 })
710 .command_name(),
711 "select-pane"
712 );
713 assert_eq!(
714 Request::SetOptionByName(SetOptionByNameRequest {
715 scope: OptionScopeSelector::ServerGlobal,
716 name: "status".to_owned(),
717 value: Some("on".to_owned()),
718 mode: SetOptionMode::Replace,
719 only_if_unset: false,
720 unset: false,
721 unset_pane_overrides: false,
722 })
723 .command_name(),
724 "set-option"
725 );
726 assert_eq!(
727 Request::SetHookMutation(SetHookMutationRequest {
728 scope: ScopeSelector::Global,
729 hook: crate::HookName::AfterNewSession,
730 command: None,
731 lifecycle: crate::HookLifecycle::Persistent,
732 append: false,
733 unset: true,
734 run_immediately: false,
735 index: None,
736 })
737 .command_name(),
738 "set-hook"
739 );
740 assert_eq!(
741 Request::AttachSessionExt2(AttachSessionExt2Request {
742 target: Some(alpha()),
743 target_spec: None,
744 detach_other_clients: false,
745 kill_other_clients: false,
746 read_only: false,
747 skip_environment_update: false,
748 flags: None,
749 working_directory: None,
750 client_terminal: crate::ClientTerminalContext::default(),
751 client_size: None,
752 })
753 .command_name(),
754 "attach-session"
755 );
756 assert_eq!(
757 Request::SwitchClientExt3(SwitchClientExt3Request {
758 target_client: None,
759 target: Some("alpha:0.0".to_owned()),
760 key_table: None,
761 last_session: false,
762 next_session: false,
763 previous_session: false,
764 toggle_read_only: false,
765 sort_order: None,
766 skip_environment_update: false,
767 zoom: false,
768 })
769 .command_name(),
770 "switch-client"
771 );
772 assert_eq!(
773 Request::ResolveTarget(ResolveTargetRequest {
774 target: Some("alpha:0.0".to_owned()),
775 target_type: ResolveTargetType::Pane,
776 window_index: false,
777 prefer_unattached: false,
778 })
779 .command_name(),
780 "resolve-target"
781 );
782 assert_eq!(
783 Request::Handshake(HandshakeRequest::current()).command_name(),
784 "handshake"
785 );
786 assert_eq!(
787 Request::SdkWaitForOutput(SdkWaitForOutputRequest {
788 owner_id: SdkWaitOwnerId::new(1),
789 wait_id: SdkWaitId::new(1),
790 target: pane(),
791 bytes: b"ready".to_vec(),
792 start: PaneOutputSubscriptionStart::Now,
793 })
794 .command_name(),
795 "sdk-wait-output"
796 );
797 assert_eq!(
798 Request::CancelSdkWait(CancelSdkWaitRequest {
799 owner_id: SdkWaitOwnerId::new(1),
800 wait_id: SdkWaitId::new(1),
801 })
802 .command_name(),
803 "cancel-sdk-wait"
804 );
805 assert_eq!(
806 Request::WaitFor(WaitForRequest {
807 channel: "ready".to_owned(),
808 mode: WaitForMode::Wait,
809 })
810 .command_name(),
811 "wait-for"
812 );
813 }
814}