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/compat.rs"]
12mod compat;
13
14#[path = "request/show.rs"]
15mod show;
16pub use show::ShowHooksRequest;
17pub use show::{ShowEnvironmentRequest, ShowOptionsRequest};
18
19#[path = "request/layout.rs"]
20mod layout;
21pub use layout::{
22 NextLayoutRequest, PreviousLayoutRequest, SelectCustomLayoutRequest, SelectLayoutRequest,
23 SelectLayoutTarget, SelectOldLayoutRequest, SpreadLayoutRequest,
24};
25
26#[path = "request/pane.rs"]
27mod pane;
28pub use pane::{
29 BreakPaneRequest, DisplayPanesRequest, JoinPaneRequest, KillPaneRequest, LastPaneRequest,
30 MovePaneRequest, PaneBroadcastInputRequest, PaneInputRequest, PaneKillRequest,
31 PaneOutputCursorRequest, PaneOutputSubscriptionStart, PaneResizeRequest, PaneRespawnRequest,
32 PaneSelectRequest, PaneSnapshotRefRequest, PaneSnapshotRequest, PaneSplitSize, PipePaneRequest,
33 ResizePaneRequest, RespawnPaneRequest, SelectPaneAdjacentRequest, SelectPaneDirection,
34 SelectPaneMarkRequest, SelectPaneRequest, SendKeysExtRequest, SendKeysRequest,
35 SplitWindowExtRequest, SplitWindowRequest, SplitWindowTarget, SubscribePaneOutputRefRequest,
36 SubscribePaneOutputRequest, SwapPaneDirection, SwapPaneRequest, UnsubscribePaneOutputRequest,
37};
38
39#[path = "request/window.rs"]
40mod window;
41pub use window::{
42 KillWindowRequest, LastWindowRequest, LinkWindowRequest, ListWindowsRequest, MoveWindowRequest,
43 MoveWindowTarget, NewWindowRequest, NextWindowRequest, PreviousWindowRequest,
44 RenameWindowRequest, ResizeWindowAdjustment, ResizeWindowRequest, RespawnWindowRequest,
45 RotateWindowDirection, RotateWindowRequest, SelectWindowRequest, SwapWindowRequest,
46};
47
48#[path = "request/target.rs"]
49mod target;
50pub use target::{ResolveTargetRequest, ResolveTargetType};
51
52#[path = "request/session.rs"]
53mod session;
54pub use session::{
55 CreateSessionLeaseRequest, HasSessionRequest, KillSessionRequest, ListSessionsRequest,
56 NewSessionExtRequest, NewSessionRequest, ReleaseSessionLeaseRequest, RenameSessionRequest,
57 RenewSessionLeaseRequest,
58};
59
60#[path = "request/server.rs"]
61mod server;
62pub use server::{
63 DaemonStatusRequest, KillServerRequest, LockClientRequest, LockServerRequest,
64 LockSessionRequest, ServerAccessRequest, ShutdownIfIdleRequest,
65};
66
67#[path = "request/client.rs"]
68mod client;
69pub use client::{
70 AttachSessionExt2Request, AttachSessionExtRequest, AttachSessionRequest,
71 DetachClientExtRequest, DetachClientRequest, ListClientsRequest, RefreshClientRequest,
72 SuspendClientRequest, SwitchClientExt2Request, SwitchClientExt3Request, SwitchClientExtRequest,
73 SwitchClientRequest,
74};
75
76#[path = "request/keys.rs"]
77mod keys;
78pub use keys::{
79 BindKeyRequest, ClockModeRequest, CopyModeRequest, ListKeysRequest, SendPrefixRequest,
80 UnbindKeyRequest,
81};
82
83#[path = "request/options.rs"]
84mod options;
85pub use options::{
86 SetEnvironmentMode, SetEnvironmentRequest, SetHookMutationRequest, SetHookRequest,
87 SetOptionByNameRequest, SetOptionRequest,
88};
89
90#[path = "request/buffer.rs"]
91mod buffer;
92pub use buffer::{
93 CapturePaneRequest, ClearHistoryRequest, DeleteBufferRequest, ListBuffersRequest,
94 LoadBufferRequest, PasteBufferRequest, SaveBufferRequest, SetBufferRequest, ShowBufferRequest,
95};
96
97#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
100pub enum Request {
101 NewSession(NewSessionRequest),
103 HasSession(HasSessionRequest),
105 KillSession(KillSessionRequest),
107 NewWindow(NewWindowRequest),
109 KillWindow(KillWindowRequest),
111 SelectWindow(SelectWindowRequest),
113 RenameWindow(RenameWindowRequest),
115 NextWindow(NextWindowRequest),
117 PreviousWindow(PreviousWindowRequest),
119 LastWindow(LastWindowRequest),
121 ListWindows(ListWindowsRequest),
123 MoveWindow(MoveWindowRequest),
125 SwapWindow(SwapWindowRequest),
127 RotateWindow(RotateWindowRequest),
129 SplitWindow(SplitWindowRequest),
131 SwapPane(SwapPaneRequest),
133 LastPane(LastPaneRequest),
135 JoinPane(JoinPaneRequest),
137 BreakPane(BreakPaneRequest),
139 KillPane(KillPaneRequest),
141 SelectLayout(SelectLayoutRequest),
143 ResizePane(ResizePaneRequest),
145 DisplayPanes(DisplayPanesRequest),
147 SelectPane(SelectPaneRequest),
149 SelectPaneAdjacent(SelectPaneAdjacentRequest),
151 SendKeys(SendKeysRequest),
153 AttachSession(AttachSessionRequest),
155 SwitchClient(SwitchClientRequest),
157 DetachClient(DetachClientRequest),
159 SetOption(SetOptionRequest),
161 SetEnvironment(SetEnvironmentRequest),
163 SetHook(SetHookRequest),
165 NextLayout(NextLayoutRequest),
167 PreviousLayout(PreviousLayoutRequest),
169 ShowOptions(ShowOptionsRequest),
171 ShowEnvironment(ShowEnvironmentRequest),
173 SetBuffer(SetBufferRequest),
175 ShowBuffer(ShowBufferRequest),
177 PasteBuffer(PasteBufferRequest),
179 ListBuffers(ListBuffersRequest),
181 DeleteBuffer(DeleteBufferRequest),
183 LoadBuffer(LoadBufferRequest),
185 SaveBuffer(SaveBufferRequest),
187 CapturePane(CapturePaneRequest),
189 DisplayMessage(DisplayMessageRequest),
191 RunShell(RunShellRequest),
193 IfShell(IfShellRequest),
195 WaitFor(WaitForRequest),
197 RenameSession(RenameSessionRequest),
199 ListSessions(ListSessionsRequest),
201 ListPanes(ListPanesRequest),
203 SourceFile(SourceFileRequest),
205 SetOptionByName(SetOptionByNameRequest),
207 SetHookMutation(SetHookMutationRequest),
209 ShowHooks(ShowHooksRequest),
211 SendKeysExt(SendKeysExtRequest),
213 SwitchClientExt(SwitchClientExtRequest),
215 BindKey(BindKeyRequest),
217 UnbindKey(UnbindKeyRequest),
219 ListKeys(ListKeysRequest),
221 SendPrefix(SendPrefixRequest),
223 ClearHistory(ClearHistoryRequest),
225 CopyMode(CopyModeRequest),
227 ControlMode(ControlModeRequest),
229 ClockMode(ClockModeRequest),
231 ShowMessages(ShowMessagesRequest),
233 NewSessionExt(NewSessionExtRequest),
235 AttachSessionExt(AttachSessionExtRequest),
237 SwitchClientExt2(SwitchClientExt2Request),
239 SelectCustomLayout(SelectCustomLayoutRequest),
241 SelectOldLayout(SelectOldLayoutRequest),
243 SpreadLayout(SpreadLayoutRequest),
245 KillServer(KillServerRequest),
247 LockServer(LockServerRequest),
249 LockSession(LockSessionRequest),
251 LockClient(LockClientRequest),
253 ServerAccess(ServerAccessRequest),
255 RefreshClient(RefreshClientRequest),
257 ListClients(ListClientsRequest),
259 SuspendClient(SuspendClientRequest),
261 DetachClientExt(DetachClientExtRequest),
263 AttachSessionExt2(AttachSessionExt2Request),
265 SwitchClientExt3(SwitchClientExt3Request),
267 ResizeWindow(ResizeWindowRequest),
269 RespawnWindow(RespawnWindowRequest),
271 MovePane(MovePaneRequest),
273 PipePane(PipePaneRequest),
275 RespawnPane(RespawnPaneRequest),
277 LinkWindow(LinkWindowRequest),
279 UnlinkWindow(UnlinkWindowRequest),
281 SelectPaneMark(SelectPaneMarkRequest),
283 ResolveTarget(ResolveTargetRequest),
285 SplitWindowExt(SplitWindowExtRequest),
287 Handshake(HandshakeRequest),
289 PaneSnapshot(PaneSnapshotRequest),
291 SubscribePaneOutput(SubscribePaneOutputRequest),
293 UnsubscribePaneOutput(UnsubscribePaneOutputRequest),
295 PaneOutputCursor(PaneOutputCursorRequest),
297 SdkWaitForOutput(SdkWaitForOutputRequest),
299 CancelSdkWait(CancelSdkWaitRequest),
301 PaneInput(PaneInputRequest),
303 PaneResize(PaneResizeRequest),
305 PaneKill(PaneKillRequest),
307 PaneRespawn(PaneRespawnRequest),
309 PaneSnapshotRef(PaneSnapshotRefRequest),
311 PaneSelect(PaneSelectRequest),
313 PaneBroadcastInput(PaneBroadcastInputRequest),
315 CreateSessionLease(CreateSessionLeaseRequest),
317 RenewSessionLease(RenewSessionLeaseRequest),
319 ReleaseSessionLease(ReleaseSessionLeaseRequest),
321 SubscribePaneOutputRef(SubscribePaneOutputRefRequest),
323 SdkWaitForOutputRef(SdkWaitForOutputRefRequest),
325 DaemonStatus(DaemonStatusRequest),
327 ShutdownIfIdle(ShutdownIfIdleRequest),
329}
330
331impl Request {
332 #[must_use]
334 pub const fn command_name(&self) -> &'static str {
335 match self {
336 Self::NewSession(_) => "new-session",
337 Self::HasSession(_) => "has-session",
338 Self::KillSession(_) => "kill-session",
339 Self::NewWindow(_) => "new-window",
340 Self::KillWindow(_) => "kill-window",
341 Self::SelectWindow(_) => "select-window",
342 Self::RenameWindow(_) => "rename-window",
343 Self::NextWindow(_) => "next-window",
344 Self::PreviousWindow(_) => "previous-window",
345 Self::LastWindow(_) => "last-window",
346 Self::ListWindows(_) => "list-windows",
347 Self::LinkWindow(_) => "link-window",
348 Self::MoveWindow(_) => "move-window",
349 Self::SwapWindow(_) => "swap-window",
350 Self::RotateWindow(_) => "rotate-window",
351 Self::SplitWindow(_) | Self::SplitWindowExt(_) => "split-window",
352 Self::SwapPane(_) => "swap-pane",
353 Self::LastPane(_) => "last-pane",
354 Self::JoinPane(_) => "join-pane",
355 Self::BreakPane(_) => "break-pane",
356 Self::KillPane(_) => "kill-pane",
357 Self::SelectLayout(_) => "select-layout",
358 Self::ResizePane(_) => "resize-pane",
359 Self::DisplayPanes(_) => "display-panes",
360 Self::SelectPane(_) | Self::SelectPaneAdjacent(_) | Self::SelectPaneMark(_) => {
361 "select-pane"
362 }
363 Self::SendKeys(_) => "send-keys",
364 Self::AttachSession(_) => "attach-session",
365 Self::SwitchClient(_) => "switch-client",
366 Self::DetachClient(_) => "detach-client",
367 Self::SetOption(_) => "set-option",
368 Self::SetEnvironment(_) => "set-environment",
369 Self::SetHook(_) => "set-hook",
370 Self::NextLayout(_) => "next-layout",
371 Self::PreviousLayout(_) => "previous-layout",
372 Self::ShowOptions(_) => "show-options",
373 Self::ShowEnvironment(_) => "show-environment",
374 Self::SetBuffer(_) => "set-buffer",
375 Self::ShowBuffer(_) => "show-buffer",
376 Self::PasteBuffer(_) => "paste-buffer",
377 Self::ListBuffers(_) => "list-buffers",
378 Self::DeleteBuffer(_) => "delete-buffer",
379 Self::LoadBuffer(_) => "load-buffer",
380 Self::SaveBuffer(_) => "save-buffer",
381 Self::CapturePane(_) => "capture-pane",
382 Self::PaneSnapshot(_) => "pane-snapshot",
383 Self::SubscribePaneOutput(_) | Self::SubscribePaneOutputRef(_) => {
384 "subscribe-pane-output"
385 }
386 Self::UnsubscribePaneOutput(_) => "unsubscribe-pane-output",
387 Self::PaneOutputCursor(_) => "pane-output-cursor",
388 Self::SdkWaitForOutput(_) | Self::SdkWaitForOutputRef(_) => "sdk-wait-output",
389 Self::CancelSdkWait(_) => "cancel-sdk-wait",
390 Self::PaneInput(_) => "send-keys",
391 Self::PaneBroadcastInput(_) => "send-keys",
392 Self::CreateSessionLease(_) => "create-session-lease",
393 Self::RenewSessionLease(_) => "renew-session-lease",
394 Self::ReleaseSessionLease(_) => "release-session-lease",
395 Self::PaneResize(_) => "resize-pane",
396 Self::PaneKill(_) => "kill-pane",
397 Self::PaneRespawn(_) => "respawn-pane",
398 Self::PaneSnapshotRef(_) => "pane-snapshot",
399 Self::PaneSelect(_) => "select-pane",
400 Self::DisplayMessage(_) => "display-message",
401 Self::ResolveTarget(_) => "resolve-target",
402 Self::RunShell(_) => "run-shell",
403 Self::IfShell(_) => "if-shell",
404 Self::WaitFor(_) => "wait-for",
405 Self::RenameSession(_) => "rename-session",
406 Self::ListSessions(_) => "list-sessions",
407 Self::ListPanes(_) => "list-panes",
408 Self::SourceFile(_) => "source-file",
409 Self::UnlinkWindow(_) => "unlink-window",
410 Self::SetOptionByName(_) => "set-option",
411 Self::SetHookMutation(_) => "set-hook",
412 Self::ShowHooks(_) => "show-hooks",
413 Self::SendKeysExt(_) => "send-keys",
414 Self::SwitchClientExt(_) => "switch-client",
415 Self::BindKey(_) => "bind-key",
416 Self::UnbindKey(_) => "unbind-key",
417 Self::ListKeys(_) => "list-keys",
418 Self::SendPrefix(_) => "send-prefix",
419 Self::ClearHistory(_) => "clear-history",
420 Self::CopyMode(_) => "copy-mode",
421 Self::ControlMode(_) => "control-mode",
422 Self::ClockMode(_) => "clock-mode",
423 Self::ShowMessages(_) => "show-messages",
424 Self::NewSessionExt(_) => "new-session",
425 Self::AttachSessionExt(_) => "attach-session",
426 Self::SwitchClientExt2(_) => "switch-client",
427 Self::SelectCustomLayout(_) => "select-layout",
428 Self::SelectOldLayout(_) => "select-layout",
429 Self::SpreadLayout(_) => "select-layout",
430 Self::ResizeWindow(_) => "resize-window",
431 Self::RespawnWindow(_) => "respawn-window",
432 Self::MovePane(_) => "move-pane",
433 Self::PipePane(_) => "pipe-pane",
434 Self::RespawnPane(_) => "respawn-pane",
435 Self::KillServer(_) => "kill-server",
436 Self::LockServer(_) => "lock-server",
437 Self::LockSession(_) => "lock-session",
438 Self::LockClient(_) => "lock-client",
439 Self::ServerAccess(_) => "server-access",
440 Self::RefreshClient(_) => "refresh-client",
441 Self::ListClients(_) => "list-clients",
442 Self::SuspendClient(_) => "suspend-client",
443 Self::DetachClientExt(_) => "detach-client",
444 Self::AttachSessionExt2(_) => "attach-session",
445 Self::SwitchClientExt3(_) => "switch-client",
446 Self::Handshake(_) => "handshake",
447 Self::DaemonStatus(_) => "daemon-status",
448 Self::ShutdownIfIdle(_) => "shutdown-if-idle",
449 }
450 }
451}
452
453#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
455pub struct DisplayMessageRequest {
456 pub target: Option<Target>,
458 pub print: bool,
460 pub message: Option<String>,
462}
463
464#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
466pub struct ShowMessagesRequest {
467 pub jobs: bool,
469 pub terminals: bool,
471 pub target_client: Option<String>,
473}
474
475#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
477pub struct RunShellRequest {
478 pub command: String,
480 pub background: bool,
482 #[serde(default)]
484 pub as_commands: bool,
485 #[serde(default)]
487 pub show_stderr: bool,
488 #[serde(default)]
490 pub delay_seconds: Option<RunShellDelaySeconds>,
491 #[serde(default)]
493 pub start_directory: Option<PathBuf>,
494 #[serde(default)]
496 pub target: Option<PaneTarget>,
497}
498
499#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
501pub struct RunShellDelaySeconds(pub f64);
502
503impl RunShellDelaySeconds {
504 #[must_use]
506 pub const fn as_secs_f64(self) -> f64 {
507 self.0
508 }
509}
510
511impl PartialEq for RunShellDelaySeconds {
512 fn eq(&self, other: &Self) -> bool {
513 self.0.to_bits() == other.0.to_bits()
514 }
515}
516
517impl Eq for RunShellDelaySeconds {}
518
519#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
521pub struct IfShellRequest {
522 pub condition: String,
524 pub format_mode: bool,
526 pub then_command: String,
528 pub else_command: Option<String>,
530 pub target: Option<Target>,
532 pub caller_cwd: Option<PathBuf>,
534 #[serde(default)]
536 pub background: bool,
537}
538
539#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
541pub struct SourceFileRequest {
542 pub paths: Vec<String>,
544 pub quiet: bool,
546 pub parse_only: bool,
548 pub verbose: bool,
550 pub expand_paths: bool,
552 pub target: Option<PaneTarget>,
554 pub caller_cwd: Option<PathBuf>,
556 pub stdin: Option<String>,
558}
559
560#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
562pub struct UnlinkWindowRequest {
563 pub target: WindowTarget,
565 #[serde(default)]
567 pub kill_if_last: bool,
568}
569
570#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
572pub enum WaitForMode {
573 Wait,
575 Signal,
577 Lock,
579 Unlock,
581}
582
583#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
585pub struct WaitForRequest {
586 pub channel: String,
588 pub mode: WaitForMode,
590}
591
592#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
599pub struct SdkWaitForOutputRequest {
600 pub owner_id: SdkWaitOwnerId,
602 pub wait_id: SdkWaitId,
604 pub target: PaneTarget,
606 pub bytes: Vec<u8>,
608 pub start: PaneOutputSubscriptionStart,
610}
611
612#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
614pub struct SdkWaitForOutputRefRequest {
615 pub owner_id: SdkWaitOwnerId,
617 pub wait_id: SdkWaitId,
619 pub target: PaneTargetRef,
621 pub bytes: Vec<u8>,
623 pub start: PaneOutputSubscriptionStart,
625}
626
627#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
629pub struct CancelSdkWaitRequest {
630 pub owner_id: SdkWaitOwnerId,
632 pub wait_id: SdkWaitId,
634}
635
636#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
638pub struct ListPanesRequest {
639 pub target: SessionName,
641 #[serde(default)]
643 pub target_window_index: Option<u32>,
644 pub format: Option<String>,
646}
647
648#[cfg(test)]
649#[path = "request/compat_tests.rs"]
650mod compat_tests;
651
652#[cfg(test)]
653mod tests {
654 use super::*;
655 use crate::{
656 OptionScopeSelector, PaneTarget, ScopeSelector, SelectPaneDirection, SetOptionMode,
657 SplitDirection,
658 };
659
660 fn alpha() -> SessionName {
661 SessionName::new("alpha").expect("valid session")
662 }
663
664 fn pane() -> PaneTarget {
665 PaneTarget::new(alpha(), 0)
666 }
667
668 #[test]
669 fn request_command_names_cover_extended_aliases_and_internal_tags() {
670 assert_eq!(
671 Request::NewSessionExt(NewSessionExtRequest {
672 session_name: None,
673 working_directory: None,
674 detached: true,
675 size: None,
676 environment: None,
677 group_target: None,
678 attach_if_exists: false,
679 detach_other_clients: false,
680 kill_other_clients: false,
681 flags: None,
682 window_name: None,
683 print_session_info: false,
684 print_format: None,
685 command: None,
686 process_command: None,
687 client_environment: None,
688 })
689 .command_name(),
690 "new-session"
691 );
692 assert_eq!(
693 Request::SplitWindowExt(SplitWindowExtRequest {
694 target: SplitWindowTarget::Pane(pane()),
695 direction: SplitDirection::Vertical,
696 before: false,
697 environment: None,
698 command: None,
699 process_command: None,
700 start_directory: None,
701 keep_alive_on_exit: None,
702 })
703 .command_name(),
704 "split-window"
705 );
706 assert_eq!(
707 Request::SelectPaneAdjacent(SelectPaneAdjacentRequest {
708 target: pane(),
709 direction: SelectPaneDirection::Right,
710 })
711 .command_name(),
712 "select-pane"
713 );
714 assert_eq!(
715 Request::SelectPaneMark(SelectPaneMarkRequest {
716 target: pane(),
717 clear: false,
718 title: None,
719 })
720 .command_name(),
721 "select-pane"
722 );
723 assert_eq!(
724 Request::SetOptionByName(SetOptionByNameRequest {
725 scope: OptionScopeSelector::ServerGlobal,
726 name: "status".to_owned(),
727 value: Some("on".to_owned()),
728 mode: SetOptionMode::Replace,
729 only_if_unset: false,
730 unset: false,
731 unset_pane_overrides: false,
732 })
733 .command_name(),
734 "set-option"
735 );
736 assert_eq!(
737 Request::SetHookMutation(SetHookMutationRequest {
738 scope: ScopeSelector::Global,
739 hook: crate::HookName::AfterNewSession,
740 command: None,
741 lifecycle: crate::HookLifecycle::Persistent,
742 append: false,
743 unset: true,
744 run_immediately: false,
745 index: None,
746 })
747 .command_name(),
748 "set-hook"
749 );
750 assert_eq!(
751 Request::AttachSessionExt2(AttachSessionExt2Request {
752 target: Some(alpha()),
753 target_spec: None,
754 detach_other_clients: false,
755 kill_other_clients: false,
756 read_only: false,
757 skip_environment_update: false,
758 flags: None,
759 working_directory: None,
760 client_terminal: crate::ClientTerminalContext::default(),
761 client_size: None,
762 })
763 .command_name(),
764 "attach-session"
765 );
766 assert_eq!(
767 Request::SwitchClientExt3(SwitchClientExt3Request {
768 target_client: None,
769 target: Some("alpha:0.0".to_owned()),
770 key_table: None,
771 last_session: false,
772 next_session: false,
773 previous_session: false,
774 toggle_read_only: false,
775 sort_order: None,
776 skip_environment_update: false,
777 zoom: false,
778 })
779 .command_name(),
780 "switch-client"
781 );
782 assert_eq!(
783 Request::ResolveTarget(ResolveTargetRequest {
784 target: Some("alpha:0.0".to_owned()),
785 target_type: ResolveTargetType::Pane,
786 window_index: false,
787 prefer_unattached: false,
788 })
789 .command_name(),
790 "resolve-target"
791 );
792 assert_eq!(
793 Request::Handshake(HandshakeRequest::current()).command_name(),
794 "handshake"
795 );
796 assert_eq!(
797 Request::SdkWaitForOutput(SdkWaitForOutputRequest {
798 owner_id: SdkWaitOwnerId::new(1),
799 wait_id: SdkWaitId::new(1),
800 target: pane(),
801 bytes: b"ready".to_vec(),
802 start: PaneOutputSubscriptionStart::Now,
803 })
804 .command_name(),
805 "sdk-wait-output"
806 );
807 assert_eq!(
808 Request::CancelSdkWait(CancelSdkWaitRequest {
809 owner_id: SdkWaitOwnerId::new(1),
810 wait_id: SdkWaitId::new(1),
811 })
812 .command_name(),
813 "cancel-sdk-wait"
814 );
815 assert_eq!(
816 Request::WaitFor(WaitForRequest {
817 channel: "ready".to_owned(),
818 mode: WaitForMode::Wait,
819 })
820 .command_name(),
821 "wait-for"
822 );
823 }
824}