use crate::{Request, Response};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct FrameKind(pub u16);
impl FrameKind {
#[must_use]
pub const fn direction(self) -> FrameDirection {
if self.0 & DIRECTION_BIT == 0 {
FrameDirection::ClientToServer
} else {
FrameDirection::ServerToClient
}
}
#[must_use]
pub const fn bincode_tag(self) -> u32 {
(self.0 & !DIRECTION_BIT) as u32
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum FrameDirection {
ClientToServer,
ServerToClient,
}
impl FrameDirection {
#[must_use]
pub const fn abbreviation(self) -> &'static str {
match self {
Self::ClientToServer => "c2s",
Self::ServerToClient => "s2c",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FrameStatus {
Active,
Reserved,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum FrameFeature {
Sessions,
Windows,
Panes,
Layouts,
Buffers,
Formats,
Hooks,
Options,
Server,
Clients,
Keys,
Targets,
Control,
Protocol,
SdkWaits,
Errors,
Reserved,
}
#[derive(Debug, Clone, Copy)]
pub struct FrameLedgerEntry {
pub kind: FrameKind,
pub direction: FrameDirection,
pub status: FrameStatus,
pub dto_type: &'static str,
pub feature: FrameFeature,
pub fixture: Option<&'static str>,
pub compatibility_note: &'static str,
}
const DIRECTION_BIT: u16 = 0x8000;
const fn c2s(tag: u16) -> FrameKind {
FrameKind(tag)
}
const fn s2c(tag: u16) -> FrameKind {
FrameKind(DIRECTION_BIT | tag)
}
const fn entry(
kind: FrameKind,
direction: FrameDirection,
status: FrameStatus,
dto_type: &'static str,
feature: FrameFeature,
fixture: Option<&'static str>,
compatibility_note: &'static str,
) -> FrameLedgerEntry {
FrameLedgerEntry {
kind,
direction,
status,
dto_type,
feature,
fixture,
compatibility_note,
}
}
const ACTIVE: FrameStatus = FrameStatus::Active;
const RESERVED: FrameStatus = FrameStatus::Reserved;
pub const V1_FRAME_LEDGER: &[FrameLedgerEntry] = &[
entry(
c2s(0),
FrameDirection::ClientToServer,
ACTIVE,
"NewSessionRequest",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 0.",
),
entry(
c2s(1),
FrameDirection::ClientToServer,
ACTIVE,
"HasSessionRequest",
FrameFeature::Sessions,
Some("has_session_request"),
"v1 baseline; pinned bincode tag 1.",
),
entry(
c2s(2),
FrameDirection::ClientToServer,
ACTIVE,
"KillSessionRequest",
FrameFeature::Sessions,
Some("kill_session_request"),
"v1 baseline; pinned bincode tag 2.",
),
entry(
c2s(3),
FrameDirection::ClientToServer,
ACTIVE,
"NewWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 3.",
),
entry(
c2s(4),
FrameDirection::ClientToServer,
ACTIVE,
"KillWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 4.",
),
entry(
c2s(5),
FrameDirection::ClientToServer,
ACTIVE,
"SelectWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 5.",
),
entry(
c2s(6),
FrameDirection::ClientToServer,
ACTIVE,
"RenameWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 6.",
),
entry(
c2s(7),
FrameDirection::ClientToServer,
ACTIVE,
"NextWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 7.",
),
entry(
c2s(8),
FrameDirection::ClientToServer,
ACTIVE,
"PreviousWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 8.",
),
entry(
c2s(9),
FrameDirection::ClientToServer,
ACTIVE,
"LastWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 9.",
),
entry(
c2s(10),
FrameDirection::ClientToServer,
ACTIVE,
"ListWindowsRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 10.",
),
entry(
c2s(11),
FrameDirection::ClientToServer,
ACTIVE,
"MoveWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 11.",
),
entry(
c2s(12),
FrameDirection::ClientToServer,
ACTIVE,
"SwapWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 12.",
),
entry(
c2s(13),
FrameDirection::ClientToServer,
ACTIVE,
"RotateWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 13.",
),
entry(
c2s(14),
FrameDirection::ClientToServer,
ACTIVE,
"SplitWindowRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 14.",
),
entry(
c2s(15),
FrameDirection::ClientToServer,
ACTIVE,
"SwapPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 15.",
),
entry(
c2s(16),
FrameDirection::ClientToServer,
ACTIVE,
"LastPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 16.",
),
entry(
c2s(17),
FrameDirection::ClientToServer,
ACTIVE,
"JoinPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 17.",
),
entry(
c2s(18),
FrameDirection::ClientToServer,
ACTIVE,
"BreakPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 18.",
),
entry(
c2s(19),
FrameDirection::ClientToServer,
ACTIVE,
"KillPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 19.",
),
entry(
c2s(20),
FrameDirection::ClientToServer,
ACTIVE,
"SelectLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 20.",
),
entry(
c2s(21),
FrameDirection::ClientToServer,
ACTIVE,
"ResizePaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 21.",
),
entry(
c2s(22),
FrameDirection::ClientToServer,
ACTIVE,
"DisplayPanesRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 22.",
),
entry(
c2s(23),
FrameDirection::ClientToServer,
ACTIVE,
"SelectPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 23.",
),
entry(
c2s(24),
FrameDirection::ClientToServer,
ACTIVE,
"SelectPaneAdjacentRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 24.",
),
entry(
c2s(25),
FrameDirection::ClientToServer,
ACTIVE,
"SendKeysRequest",
FrameFeature::Panes,
Some("send_keys_request"),
"v1 baseline; pinned bincode tag 25.",
),
entry(
c2s(26),
FrameDirection::ClientToServer,
ACTIVE,
"AttachSessionRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 26.",
),
entry(
c2s(27),
FrameDirection::ClientToServer,
ACTIVE,
"SwitchClientRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 27.",
),
entry(
c2s(28),
FrameDirection::ClientToServer,
ACTIVE,
"DetachClientRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 28.",
),
entry(
c2s(29),
FrameDirection::ClientToServer,
ACTIVE,
"SetOptionRequest",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 29.",
),
entry(
c2s(30),
FrameDirection::ClientToServer,
ACTIVE,
"SetEnvironmentRequest",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 30.",
),
entry(
c2s(31),
FrameDirection::ClientToServer,
ACTIVE,
"SetHookRequest",
FrameFeature::Hooks,
None,
"v1 baseline; pinned bincode tag 31.",
),
entry(
c2s(32),
FrameDirection::ClientToServer,
ACTIVE,
"NextLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 32.",
),
entry(
c2s(33),
FrameDirection::ClientToServer,
ACTIVE,
"PreviousLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 33.",
),
entry(
c2s(34),
FrameDirection::ClientToServer,
ACTIVE,
"ShowOptionsRequest",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 34.",
),
entry(
c2s(35),
FrameDirection::ClientToServer,
ACTIVE,
"ShowEnvironmentRequest",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 35.",
),
entry(
c2s(36),
FrameDirection::ClientToServer,
ACTIVE,
"SetBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 36.",
),
entry(
c2s(37),
FrameDirection::ClientToServer,
ACTIVE,
"ShowBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 37.",
),
entry(
c2s(38),
FrameDirection::ClientToServer,
ACTIVE,
"PasteBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 38.",
),
entry(
c2s(39),
FrameDirection::ClientToServer,
ACTIVE,
"ListBuffersRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 39.",
),
entry(
c2s(40),
FrameDirection::ClientToServer,
ACTIVE,
"DeleteBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 40.",
),
entry(
c2s(41),
FrameDirection::ClientToServer,
ACTIVE,
"LoadBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 41.",
),
entry(
c2s(42),
FrameDirection::ClientToServer,
ACTIVE,
"SaveBufferRequest",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 42.",
),
entry(
c2s(43),
FrameDirection::ClientToServer,
ACTIVE,
"CapturePaneRequest",
FrameFeature::Panes,
Some("capture_pane_request"),
"v1 baseline; pinned bincode tag 43.",
),
entry(
c2s(44),
FrameDirection::ClientToServer,
ACTIVE,
"DisplayMessageRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 44.",
),
entry(
c2s(45),
FrameDirection::ClientToServer,
ACTIVE,
"RunShellRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 45.",
),
entry(
c2s(46),
FrameDirection::ClientToServer,
ACTIVE,
"IfShellRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 46.",
),
entry(
c2s(47),
FrameDirection::ClientToServer,
ACTIVE,
"WaitForRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 47.",
),
entry(
c2s(48),
FrameDirection::ClientToServer,
ACTIVE,
"RenameSessionRequest",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 48.",
),
entry(
c2s(49),
FrameDirection::ClientToServer,
ACTIVE,
"ListSessionsRequest",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 49.",
),
entry(
c2s(50),
FrameDirection::ClientToServer,
ACTIVE,
"ListPanesRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 50.",
),
entry(
c2s(51),
FrameDirection::ClientToServer,
ACTIVE,
"SourceFileRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 51.",
),
entry(
c2s(52),
FrameDirection::ClientToServer,
ACTIVE,
"SetOptionByNameRequest",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 52.",
),
entry(
c2s(53),
FrameDirection::ClientToServer,
ACTIVE,
"SetHookMutationRequest",
FrameFeature::Hooks,
None,
"v1 baseline; pinned bincode tag 53.",
),
entry(
c2s(54),
FrameDirection::ClientToServer,
ACTIVE,
"ShowHooksRequest",
FrameFeature::Hooks,
None,
"v1 baseline; pinned bincode tag 54.",
),
entry(
c2s(55),
FrameDirection::ClientToServer,
ACTIVE,
"SendKeysExtRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 55.",
),
entry(
c2s(56),
FrameDirection::ClientToServer,
ACTIVE,
"SwitchClientExtRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 56.",
),
entry(
c2s(57),
FrameDirection::ClientToServer,
ACTIVE,
"BindKeyRequest",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 57.",
),
entry(
c2s(58),
FrameDirection::ClientToServer,
ACTIVE,
"UnbindKeyRequest",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 58.",
),
entry(
c2s(59),
FrameDirection::ClientToServer,
ACTIVE,
"ListKeysRequest",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 59.",
),
entry(
c2s(60),
FrameDirection::ClientToServer,
ACTIVE,
"SendPrefixRequest",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 60.",
),
entry(
c2s(61),
FrameDirection::ClientToServer,
ACTIVE,
"ClearHistoryRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 61.",
),
entry(
c2s(62),
FrameDirection::ClientToServer,
ACTIVE,
"CopyModeRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 62.",
),
entry(
c2s(63),
FrameDirection::ClientToServer,
ACTIVE,
"ControlModeRequest",
FrameFeature::Control,
Some("control_mode_request"),
"v1 baseline; pinned bincode tag 63.",
),
entry(
c2s(64),
FrameDirection::ClientToServer,
ACTIVE,
"ClockModeRequest",
FrameFeature::Control,
None,
"v1 baseline; pinned bincode tag 64.",
),
entry(
c2s(65),
FrameDirection::ClientToServer,
ACTIVE,
"ShowMessagesRequest",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 65.",
),
entry(
c2s(66),
FrameDirection::ClientToServer,
ACTIVE,
"NewSessionExtRequest",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 66.",
),
entry(
c2s(67),
FrameDirection::ClientToServer,
ACTIVE,
"AttachSessionExtRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 67.",
),
entry(
c2s(68),
FrameDirection::ClientToServer,
ACTIVE,
"SwitchClientExt2Request",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 68.",
),
entry(
c2s(69),
FrameDirection::ClientToServer,
ACTIVE,
"SelectCustomLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 69.",
),
entry(
c2s(70),
FrameDirection::ClientToServer,
ACTIVE,
"SelectOldLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 70.",
),
entry(
c2s(71),
FrameDirection::ClientToServer,
ACTIVE,
"SpreadLayoutRequest",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 71.",
),
entry(
c2s(72),
FrameDirection::ClientToServer,
ACTIVE,
"KillServerRequest",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 72.",
),
entry(
c2s(73),
FrameDirection::ClientToServer,
ACTIVE,
"LockServerRequest",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 73.",
),
entry(
c2s(74),
FrameDirection::ClientToServer,
ACTIVE,
"LockSessionRequest",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 74.",
),
entry(
c2s(75),
FrameDirection::ClientToServer,
ACTIVE,
"LockClientRequest",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 75.",
),
entry(
c2s(76),
FrameDirection::ClientToServer,
ACTIVE,
"ServerAccessRequest",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 76.",
),
entry(
c2s(77),
FrameDirection::ClientToServer,
ACTIVE,
"RefreshClientRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 77.",
),
entry(
c2s(78),
FrameDirection::ClientToServer,
ACTIVE,
"ListClientsRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 78.",
),
entry(
c2s(79),
FrameDirection::ClientToServer,
ACTIVE,
"SuspendClientRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 79.",
),
entry(
c2s(80),
FrameDirection::ClientToServer,
ACTIVE,
"DetachClientExtRequest",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 80.",
),
entry(
c2s(81),
FrameDirection::ClientToServer,
ACTIVE,
"AttachSessionExt2Request",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 81.",
),
entry(
c2s(82),
FrameDirection::ClientToServer,
ACTIVE,
"SwitchClientExt3Request",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 82.",
),
entry(
c2s(83),
FrameDirection::ClientToServer,
ACTIVE,
"ResizeWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 83.",
),
entry(
c2s(84),
FrameDirection::ClientToServer,
ACTIVE,
"RespawnWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 84.",
),
entry(
c2s(85),
FrameDirection::ClientToServer,
ACTIVE,
"MovePaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 85.",
),
entry(
c2s(86),
FrameDirection::ClientToServer,
ACTIVE,
"PipePaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 86.",
),
entry(
c2s(87),
FrameDirection::ClientToServer,
ACTIVE,
"RespawnPaneRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 87.",
),
entry(
c2s(88),
FrameDirection::ClientToServer,
ACTIVE,
"LinkWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 88.",
),
entry(
c2s(89),
FrameDirection::ClientToServer,
ACTIVE,
"UnlinkWindowRequest",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 89.",
),
entry(
c2s(90),
FrameDirection::ClientToServer,
ACTIVE,
"SelectPaneMarkRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 90.",
),
entry(
c2s(91),
FrameDirection::ClientToServer,
ACTIVE,
"ResolveTargetRequest",
FrameFeature::Targets,
None,
"v1 baseline; pinned bincode tag 91.",
),
entry(
c2s(92),
FrameDirection::ClientToServer,
ACTIVE,
"SplitWindowExtRequest",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 92.",
),
entry(
c2s(93),
FrameDirection::ClientToServer,
ACTIVE,
"HandshakeRequest",
FrameFeature::Protocol,
None,
"v1 capability negotiation; pinned bincode tag 93.",
),
entry(
c2s(94),
FrameDirection::ClientToServer,
ACTIVE,
"PaneSnapshotRequest",
FrameFeature::Panes,
None,
"Daemon-backed structured pane snapshot endpoint; pinned bincode tag 94.",
),
entry(
c2s(95),
FrameDirection::ClientToServer,
ACTIVE,
"SubscribePaneOutputRequest",
FrameFeature::Panes,
None,
"Milestone 26 pane output subscription endpoint; pinned bincode tag 95.",
),
entry(
c2s(96),
FrameDirection::ClientToServer,
ACTIVE,
"UnsubscribePaneOutputRequest",
FrameFeature::Panes,
None,
"Milestone 26 pane output unsubscription endpoint; pinned bincode tag 96.",
),
entry(
c2s(97),
FrameDirection::ClientToServer,
ACTIVE,
"PaneOutputCursorRequest",
FrameFeature::Panes,
None,
"Milestone 26 pane output cursor endpoint; pinned bincode tag 97.",
),
entry(
c2s(98),
FrameDirection::ClientToServer,
ACTIVE,
"SdkWaitForOutputRequest",
FrameFeature::SdkWaits,
None,
"Milestone 29 daemon-backed SDK byte wait endpoint; pinned bincode tag 98.",
),
entry(
c2s(99),
FrameDirection::ClientToServer,
ACTIVE,
"CancelSdkWaitRequest",
FrameFeature::SdkWaits,
None,
"Milestone 29 daemon-backed SDK wait cancellation endpoint; pinned bincode tag 99.",
),
entry(
c2s(0x7FFE),
FrameDirection::ClientToServer,
RESERVED,
"(reserved-c2s-near-end)",
FrameFeature::Reserved,
None,
"Reserved sentinel near the c2s ceiling. Permanently unavailable.",
),
entry(
c2s(0x7FFF),
FrameDirection::ClientToServer,
RESERVED,
"(reserved-c2s-ceiling)",
FrameFeature::Reserved,
None,
"Last c2s slot. Permanently reserved.",
),
entry(
s2c(0),
FrameDirection::ServerToClient,
ACTIVE,
"NewSessionResponse",
FrameFeature::Sessions,
Some("new_session_response"),
"v1 baseline; pinned bincode tag 0.",
),
entry(
s2c(1),
FrameDirection::ServerToClient,
ACTIVE,
"HasSessionResponse",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 1.",
),
entry(
s2c(2),
FrameDirection::ServerToClient,
ACTIVE,
"KillSessionResponse",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 2.",
),
entry(
s2c(3),
FrameDirection::ServerToClient,
ACTIVE,
"NewWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 3.",
),
entry(
s2c(4),
FrameDirection::ServerToClient,
ACTIVE,
"KillWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 4.",
),
entry(
s2c(5),
FrameDirection::ServerToClient,
ACTIVE,
"SelectWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 5.",
),
entry(
s2c(6),
FrameDirection::ServerToClient,
ACTIVE,
"RenameWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 6.",
),
entry(
s2c(7),
FrameDirection::ServerToClient,
ACTIVE,
"NextWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 7.",
),
entry(
s2c(8),
FrameDirection::ServerToClient,
ACTIVE,
"PreviousWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 8.",
),
entry(
s2c(9),
FrameDirection::ServerToClient,
ACTIVE,
"LastWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 9.",
),
entry(
s2c(10),
FrameDirection::ServerToClient,
ACTIVE,
"ListWindowsResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 10.",
),
entry(
s2c(11),
FrameDirection::ServerToClient,
ACTIVE,
"MoveWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 11.",
),
entry(
s2c(12),
FrameDirection::ServerToClient,
ACTIVE,
"SwapWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 12.",
),
entry(
s2c(13),
FrameDirection::ServerToClient,
ACTIVE,
"RotateWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 13.",
),
entry(
s2c(14),
FrameDirection::ServerToClient,
ACTIVE,
"SplitWindowResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 14.",
),
entry(
s2c(15),
FrameDirection::ServerToClient,
ACTIVE,
"SwapPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 15.",
),
entry(
s2c(16),
FrameDirection::ServerToClient,
ACTIVE,
"LastPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 16.",
),
entry(
s2c(17),
FrameDirection::ServerToClient,
ACTIVE,
"JoinPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 17.",
),
entry(
s2c(18),
FrameDirection::ServerToClient,
ACTIVE,
"BreakPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 18.",
),
entry(
s2c(19),
FrameDirection::ServerToClient,
ACTIVE,
"KillPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 19.",
),
entry(
s2c(20),
FrameDirection::ServerToClient,
ACTIVE,
"SelectLayoutResponse",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 20.",
),
entry(
s2c(21),
FrameDirection::ServerToClient,
ACTIVE,
"ResizePaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 21.",
),
entry(
s2c(22),
FrameDirection::ServerToClient,
ACTIVE,
"DisplayPanesResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 22.",
),
entry(
s2c(23),
FrameDirection::ServerToClient,
ACTIVE,
"SelectPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 23.",
),
entry(
s2c(24),
FrameDirection::ServerToClient,
ACTIVE,
"SendKeysResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 24.",
),
entry(
s2c(25),
FrameDirection::ServerToClient,
ACTIVE,
"AttachSessionResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 25.",
),
entry(
s2c(26),
FrameDirection::ServerToClient,
ACTIVE,
"SwitchClientResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 26.",
),
entry(
s2c(27),
FrameDirection::ServerToClient,
ACTIVE,
"DetachClientResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 27.",
),
entry(
s2c(28),
FrameDirection::ServerToClient,
ACTIVE,
"SetOptionResponse",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 28.",
),
entry(
s2c(29),
FrameDirection::ServerToClient,
ACTIVE,
"SetEnvironmentResponse",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 29.",
),
entry(
s2c(30),
FrameDirection::ServerToClient,
ACTIVE,
"SetHookResponse",
FrameFeature::Hooks,
None,
"v1 baseline; pinned bincode tag 30.",
),
entry(
s2c(31),
FrameDirection::ServerToClient,
ACTIVE,
"ErrorResponse",
FrameFeature::Errors,
Some("error_response"),
"v1 baseline; pinned bincode tag 31.",
),
entry(
s2c(32),
FrameDirection::ServerToClient,
ACTIVE,
"NextLayoutResponse",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 32.",
),
entry(
s2c(33),
FrameDirection::ServerToClient,
ACTIVE,
"PreviousLayoutResponse",
FrameFeature::Layouts,
None,
"v1 baseline; pinned bincode tag 33.",
),
entry(
s2c(34),
FrameDirection::ServerToClient,
ACTIVE,
"ShowOptionsResponse",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 34.",
),
entry(
s2c(35),
FrameDirection::ServerToClient,
ACTIVE,
"ShowEnvironmentResponse",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 35.",
),
entry(
s2c(36),
FrameDirection::ServerToClient,
ACTIVE,
"SetBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 36.",
),
entry(
s2c(37),
FrameDirection::ServerToClient,
ACTIVE,
"ShowBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 37.",
),
entry(
s2c(38),
FrameDirection::ServerToClient,
ACTIVE,
"PasteBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 38.",
),
entry(
s2c(39),
FrameDirection::ServerToClient,
ACTIVE,
"ListBuffersResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 39.",
),
entry(
s2c(40),
FrameDirection::ServerToClient,
ACTIVE,
"DeleteBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 40.",
),
entry(
s2c(41),
FrameDirection::ServerToClient,
ACTIVE,
"LoadBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 41.",
),
entry(
s2c(42),
FrameDirection::ServerToClient,
ACTIVE,
"SaveBufferResponse",
FrameFeature::Buffers,
None,
"v1 baseline; pinned bincode tag 42.",
),
entry(
s2c(43),
FrameDirection::ServerToClient,
ACTIVE,
"CapturePaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 43.",
),
entry(
s2c(44),
FrameDirection::ServerToClient,
ACTIVE,
"DisplayMessageResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 44.",
),
entry(
s2c(45),
FrameDirection::ServerToClient,
ACTIVE,
"RunShellResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 45.",
),
entry(
s2c(46),
FrameDirection::ServerToClient,
ACTIVE,
"IfShellResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 46.",
),
entry(
s2c(47),
FrameDirection::ServerToClient,
ACTIVE,
"WaitForResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 47.",
),
entry(
s2c(48),
FrameDirection::ServerToClient,
ACTIVE,
"RenameSessionResponse",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 48.",
),
entry(
s2c(49),
FrameDirection::ServerToClient,
ACTIVE,
"ListSessionsResponse",
FrameFeature::Sessions,
None,
"v1 baseline; pinned bincode tag 49.",
),
entry(
s2c(50),
FrameDirection::ServerToClient,
ACTIVE,
"ListPanesResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 50.",
),
entry(
s2c(51),
FrameDirection::ServerToClient,
ACTIVE,
"SourceFileResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 51.",
),
entry(
s2c(52),
FrameDirection::ServerToClient,
ACTIVE,
"SetOptionByNameResponse",
FrameFeature::Options,
None,
"v1 baseline; pinned bincode tag 52.",
),
entry(
s2c(53),
FrameDirection::ServerToClient,
ACTIVE,
"ShowHooksResponse",
FrameFeature::Hooks,
None,
"v1 baseline; pinned bincode tag 53.",
),
entry(
s2c(54),
FrameDirection::ServerToClient,
ACTIVE,
"BindKeyResponse",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 54.",
),
entry(
s2c(55),
FrameDirection::ServerToClient,
ACTIVE,
"UnbindKeyResponse",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 55.",
),
entry(
s2c(56),
FrameDirection::ServerToClient,
ACTIVE,
"ListKeysResponse",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 56.",
),
entry(
s2c(57),
FrameDirection::ServerToClient,
ACTIVE,
"SendPrefixResponse",
FrameFeature::Keys,
None,
"v1 baseline; pinned bincode tag 57.",
),
entry(
s2c(58),
FrameDirection::ServerToClient,
ACTIVE,
"ClearHistoryResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 58.",
),
entry(
s2c(59),
FrameDirection::ServerToClient,
ACTIVE,
"CopyModeResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 59.",
),
entry(
s2c(60),
FrameDirection::ServerToClient,
ACTIVE,
"ControlModeResponse",
FrameFeature::Control,
None,
"v1 baseline; pinned bincode tag 60.",
),
entry(
s2c(61),
FrameDirection::ServerToClient,
ACTIVE,
"ClockModeResponse",
FrameFeature::Control,
None,
"v1 baseline; pinned bincode tag 61.",
),
entry(
s2c(62),
FrameDirection::ServerToClient,
ACTIVE,
"ShowMessagesResponse",
FrameFeature::Formats,
None,
"v1 baseline; pinned bincode tag 62.",
),
entry(
s2c(63),
FrameDirection::ServerToClient,
ACTIVE,
"KillServerResponse",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 63.",
),
entry(
s2c(64),
FrameDirection::ServerToClient,
ACTIVE,
"LockServerResponse",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 64.",
),
entry(
s2c(65),
FrameDirection::ServerToClient,
ACTIVE,
"LockSessionResponse",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 65.",
),
entry(
s2c(66),
FrameDirection::ServerToClient,
ACTIVE,
"LockClientResponse",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 66.",
),
entry(
s2c(67),
FrameDirection::ServerToClient,
ACTIVE,
"ServerAccessResponse",
FrameFeature::Server,
None,
"v1 baseline; pinned bincode tag 67.",
),
entry(
s2c(68),
FrameDirection::ServerToClient,
ACTIVE,
"RefreshClientResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 68.",
),
entry(
s2c(69),
FrameDirection::ServerToClient,
ACTIVE,
"ListClientsResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 69.",
),
entry(
s2c(70),
FrameDirection::ServerToClient,
ACTIVE,
"SuspendClientResponse",
FrameFeature::Clients,
None,
"v1 baseline; pinned bincode tag 70.",
),
entry(
s2c(71),
FrameDirection::ServerToClient,
ACTIVE,
"ResizeWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 71.",
),
entry(
s2c(72),
FrameDirection::ServerToClient,
ACTIVE,
"RespawnWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 72.",
),
entry(
s2c(73),
FrameDirection::ServerToClient,
ACTIVE,
"MovePaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 73.",
),
entry(
s2c(74),
FrameDirection::ServerToClient,
ACTIVE,
"PipePaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 74.",
),
entry(
s2c(75),
FrameDirection::ServerToClient,
ACTIVE,
"RespawnPaneResponse",
FrameFeature::Panes,
None,
"v1 baseline; pinned bincode tag 75.",
),
entry(
s2c(76),
FrameDirection::ServerToClient,
ACTIVE,
"LinkWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 76.",
),
entry(
s2c(77),
FrameDirection::ServerToClient,
ACTIVE,
"UnlinkWindowResponse",
FrameFeature::Windows,
None,
"v1 baseline; pinned bincode tag 77.",
),
entry(
s2c(78),
FrameDirection::ServerToClient,
ACTIVE,
"ResolveTargetResponse",
FrameFeature::Targets,
None,
"v1 baseline; pinned bincode tag 78.",
),
entry(
s2c(79),
FrameDirection::ServerToClient,
ACTIVE,
"HandshakeResponse",
FrameFeature::Protocol,
None,
"v1 capability negotiation; pinned bincode tag 79.",
),
entry(
s2c(80),
FrameDirection::ServerToClient,
ACTIVE,
"PaneSnapshotResponse",
FrameFeature::Panes,
None,
"Daemon-backed structured pane snapshot endpoint; pinned bincode tag 80.",
),
entry(
s2c(81),
FrameDirection::ServerToClient,
ACTIVE,
"SubscribePaneOutputResponse",
FrameFeature::Panes,
None,
"Milestone 26 pane output subscription response; pinned bincode tag 81.",
),
entry(
s2c(82),
FrameDirection::ServerToClient,
ACTIVE,
"UnsubscribePaneOutputResponse",
FrameFeature::Panes,
None,
"Milestone 26 pane output unsubscription response; pinned bincode tag 82.",
),
entry(
s2c(83),
FrameDirection::ServerToClient,
ACTIVE,
"PaneOutputCursorResponse",
FrameFeature::Panes,
None,
"Milestone 26 pane output cursor response; pinned bincode tag 83.",
),
entry(
s2c(84),
FrameDirection::ServerToClient,
ACTIVE,
"PaneOutputLagResponse",
FrameFeature::Panes,
None,
"Milestone 26 pane output lag notice response; pinned bincode tag 84.",
),
entry(
s2c(85),
FrameDirection::ServerToClient,
ACTIVE,
"SdkWaitForOutputResponse",
FrameFeature::SdkWaits,
None,
"Milestone 29 daemon-backed SDK byte wait response; pinned bincode tag 85.",
),
entry(
s2c(86),
FrameDirection::ServerToClient,
ACTIVE,
"CancelSdkWaitResponse",
FrameFeature::SdkWaits,
None,
"Milestone 29 daemon-backed SDK wait cancellation response; pinned bincode tag 86.",
),
entry(
s2c(0x7FFE),
FrameDirection::ServerToClient,
RESERVED,
"(reserved-s2c-near-end)",
FrameFeature::Reserved,
None,
"Reserved sentinel near the s2c ceiling. Permanently unavailable.",
),
entry(
s2c(0x7FFF),
FrameDirection::ServerToClient,
RESERVED,
"(reserved-s2c-ceiling)",
FrameFeature::Reserved,
None,
"Last s2c slot. Permanently reserved.",
),
];
#[must_use]
pub const fn frame_kind_for_request(request: &Request) -> FrameKind {
match request {
Request::NewSession(_) => c2s(0),
Request::HasSession(_) => c2s(1),
Request::KillSession(_) => c2s(2),
Request::NewWindow(_) => c2s(3),
Request::KillWindow(_) => c2s(4),
Request::SelectWindow(_) => c2s(5),
Request::RenameWindow(_) => c2s(6),
Request::NextWindow(_) => c2s(7),
Request::PreviousWindow(_) => c2s(8),
Request::LastWindow(_) => c2s(9),
Request::ListWindows(_) => c2s(10),
Request::MoveWindow(_) => c2s(11),
Request::SwapWindow(_) => c2s(12),
Request::RotateWindow(_) => c2s(13),
Request::SplitWindow(_) => c2s(14),
Request::SwapPane(_) => c2s(15),
Request::LastPane(_) => c2s(16),
Request::JoinPane(_) => c2s(17),
Request::BreakPane(_) => c2s(18),
Request::KillPane(_) => c2s(19),
Request::SelectLayout(_) => c2s(20),
Request::ResizePane(_) => c2s(21),
Request::DisplayPanes(_) => c2s(22),
Request::SelectPane(_) => c2s(23),
Request::SelectPaneAdjacent(_) => c2s(24),
Request::SendKeys(_) => c2s(25),
Request::AttachSession(_) => c2s(26),
Request::SwitchClient(_) => c2s(27),
Request::DetachClient(_) => c2s(28),
Request::SetOption(_) => c2s(29),
Request::SetEnvironment(_) => c2s(30),
Request::SetHook(_) => c2s(31),
Request::NextLayout(_) => c2s(32),
Request::PreviousLayout(_) => c2s(33),
Request::ShowOptions(_) => c2s(34),
Request::ShowEnvironment(_) => c2s(35),
Request::SetBuffer(_) => c2s(36),
Request::ShowBuffer(_) => c2s(37),
Request::PasteBuffer(_) => c2s(38),
Request::ListBuffers(_) => c2s(39),
Request::DeleteBuffer(_) => c2s(40),
Request::LoadBuffer(_) => c2s(41),
Request::SaveBuffer(_) => c2s(42),
Request::CapturePane(_) => c2s(43),
Request::DisplayMessage(_) => c2s(44),
Request::RunShell(_) => c2s(45),
Request::IfShell(_) => c2s(46),
Request::WaitFor(_) => c2s(47),
Request::RenameSession(_) => c2s(48),
Request::ListSessions(_) => c2s(49),
Request::ListPanes(_) => c2s(50),
Request::SourceFile(_) => c2s(51),
Request::SetOptionByName(_) => c2s(52),
Request::SetHookMutation(_) => c2s(53),
Request::ShowHooks(_) => c2s(54),
Request::SendKeysExt(_) => c2s(55),
Request::SwitchClientExt(_) => c2s(56),
Request::BindKey(_) => c2s(57),
Request::UnbindKey(_) => c2s(58),
Request::ListKeys(_) => c2s(59),
Request::SendPrefix(_) => c2s(60),
Request::ClearHistory(_) => c2s(61),
Request::CopyMode(_) => c2s(62),
Request::ControlMode(_) => c2s(63),
Request::ClockMode(_) => c2s(64),
Request::ShowMessages(_) => c2s(65),
Request::NewSessionExt(_) => c2s(66),
Request::AttachSessionExt(_) => c2s(67),
Request::SwitchClientExt2(_) => c2s(68),
Request::SelectCustomLayout(_) => c2s(69),
Request::SelectOldLayout(_) => c2s(70),
Request::SpreadLayout(_) => c2s(71),
Request::KillServer(_) => c2s(72),
Request::LockServer(_) => c2s(73),
Request::LockSession(_) => c2s(74),
Request::LockClient(_) => c2s(75),
Request::ServerAccess(_) => c2s(76),
Request::RefreshClient(_) => c2s(77),
Request::ListClients(_) => c2s(78),
Request::SuspendClient(_) => c2s(79),
Request::DetachClientExt(_) => c2s(80),
Request::AttachSessionExt2(_) => c2s(81),
Request::SwitchClientExt3(_) => c2s(82),
Request::ResizeWindow(_) => c2s(83),
Request::RespawnWindow(_) => c2s(84),
Request::MovePane(_) => c2s(85),
Request::PipePane(_) => c2s(86),
Request::RespawnPane(_) => c2s(87),
Request::LinkWindow(_) => c2s(88),
Request::UnlinkWindow(_) => c2s(89),
Request::SelectPaneMark(_) => c2s(90),
Request::ResolveTarget(_) => c2s(91),
Request::SplitWindowExt(_) => c2s(92),
Request::Handshake(_) => c2s(93),
Request::PaneSnapshot(_) => c2s(94),
Request::SubscribePaneOutput(_) => c2s(95),
Request::UnsubscribePaneOutput(_) => c2s(96),
Request::PaneOutputCursor(_) => c2s(97),
Request::SdkWaitForOutput(_) => c2s(98),
Request::CancelSdkWait(_) => c2s(99),
}
}
#[must_use]
pub const fn frame_kind_for_response(response: &Response) -> FrameKind {
match response {
Response::NewSession(_) => s2c(0),
Response::HasSession(_) => s2c(1),
Response::KillSession(_) => s2c(2),
Response::NewWindow(_) => s2c(3),
Response::KillWindow(_) => s2c(4),
Response::SelectWindow(_) => s2c(5),
Response::RenameWindow(_) => s2c(6),
Response::NextWindow(_) => s2c(7),
Response::PreviousWindow(_) => s2c(8),
Response::LastWindow(_) => s2c(9),
Response::ListWindows(_) => s2c(10),
Response::MoveWindow(_) => s2c(11),
Response::SwapWindow(_) => s2c(12),
Response::RotateWindow(_) => s2c(13),
Response::SplitWindow(_) => s2c(14),
Response::SwapPane(_) => s2c(15),
Response::LastPane(_) => s2c(16),
Response::JoinPane(_) => s2c(17),
Response::BreakPane(_) => s2c(18),
Response::KillPane(_) => s2c(19),
Response::SelectLayout(_) => s2c(20),
Response::ResizePane(_) => s2c(21),
Response::DisplayPanes(_) => s2c(22),
Response::SelectPane(_) => s2c(23),
Response::SendKeys(_) => s2c(24),
Response::AttachSession(_) => s2c(25),
Response::SwitchClient(_) => s2c(26),
Response::DetachClient(_) => s2c(27),
Response::SetOption(_) => s2c(28),
Response::SetEnvironment(_) => s2c(29),
Response::SetHook(_) => s2c(30),
Response::Error(_) => s2c(31),
Response::NextLayout(_) => s2c(32),
Response::PreviousLayout(_) => s2c(33),
Response::ShowOptions(_) => s2c(34),
Response::ShowEnvironment(_) => s2c(35),
Response::SetBuffer(_) => s2c(36),
Response::ShowBuffer(_) => s2c(37),
Response::PasteBuffer(_) => s2c(38),
Response::ListBuffers(_) => s2c(39),
Response::DeleteBuffer(_) => s2c(40),
Response::LoadBuffer(_) => s2c(41),
Response::SaveBuffer(_) => s2c(42),
Response::CapturePane(_) => s2c(43),
Response::DisplayMessage(_) => s2c(44),
Response::RunShell(_) => s2c(45),
Response::IfShell(_) => s2c(46),
Response::WaitFor(_) => s2c(47),
Response::RenameSession(_) => s2c(48),
Response::ListSessions(_) => s2c(49),
Response::ListPanes(_) => s2c(50),
Response::SourceFile(_) => s2c(51),
Response::SetOptionByName(_) => s2c(52),
Response::ShowHooks(_) => s2c(53),
Response::BindKey(_) => s2c(54),
Response::UnbindKey(_) => s2c(55),
Response::ListKeys(_) => s2c(56),
Response::SendPrefix(_) => s2c(57),
Response::ClearHistory(_) => s2c(58),
Response::CopyMode(_) => s2c(59),
Response::ControlMode(_) => s2c(60),
Response::ClockMode(_) => s2c(61),
Response::ShowMessages(_) => s2c(62),
Response::KillServer(_) => s2c(63),
Response::LockServer(_) => s2c(64),
Response::LockSession(_) => s2c(65),
Response::LockClient(_) => s2c(66),
Response::ServerAccess(_) => s2c(67),
Response::RefreshClient(_) => s2c(68),
Response::ListClients(_) => s2c(69),
Response::SuspendClient(_) => s2c(70),
Response::ResizeWindow(_) => s2c(71),
Response::RespawnWindow(_) => s2c(72),
Response::MovePane(_) => s2c(73),
Response::PipePane(_) => s2c(74),
Response::RespawnPane(_) => s2c(75),
Response::LinkWindow(_) => s2c(76),
Response::UnlinkWindow(_) => s2c(77),
Response::ResolveTarget(_) => s2c(78),
Response::Handshake(_) => s2c(79),
Response::PaneSnapshot(_) => s2c(80),
Response::SubscribePaneOutput(_) => s2c(81),
Response::UnsubscribePaneOutput(_) => s2c(82),
Response::PaneOutputCursor(_) => s2c(83),
Response::PaneOutputLag(_) => s2c(84),
Response::SdkWaitForOutput(_) => s2c(85),
Response::CancelSdkWait(_) => s2c(86),
}
}
#[must_use]
pub fn ledger_entry_for(kind: FrameKind) -> Option<&'static FrameLedgerEntry> {
V1_FRAME_LEDGER.iter().find(|entry| entry.kind == kind)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ledger_kinds_are_unique() {
let mut seen = std::collections::HashSet::new();
for entry in V1_FRAME_LEDGER {
assert!(
seen.insert(entry.kind),
"duplicate FrameKind {:#06x} for {}",
entry.kind.0,
entry.dto_type
);
}
}
#[test]
fn direction_bit_partitions_kinds() {
for entry in V1_FRAME_LEDGER {
assert_eq!(entry.kind.direction(), entry.direction);
}
}
#[test]
fn fixture_names_are_unique() {
let mut seen = std::collections::HashSet::new();
for entry in V1_FRAME_LEDGER {
if let Some(name) = entry.fixture {
assert!(seen.insert(name), "duplicate fixture {name}");
}
}
}
#[test]
fn reserved_entries_have_reserved_feature() {
for entry in V1_FRAME_LEDGER {
if matches!(entry.status, FrameStatus::Reserved) {
assert!(matches!(entry.feature, FrameFeature::Reserved));
}
}
}
#[test]
fn bincode_tag_never_uses_direction_bit() {
for entry in V1_FRAME_LEDGER {
assert!(
entry.kind.bincode_tag() < 0x8000,
"ledger entry {} kind {:#06x} bincode_tag {} ≥ 0x8000",
entry.dto_type,
entry.kind.0,
entry.kind.bincode_tag(),
);
}
}
#[test]
fn ledger_entry_for_returns_each_active_entry() {
for entry in V1_FRAME_LEDGER {
let looked_up = ledger_entry_for(entry.kind)
.unwrap_or_else(|| panic!("kind {:#06x} not reachable", entry.kind.0));
assert_eq!(looked_up.kind, entry.kind);
assert_eq!(looked_up.direction, entry.direction);
assert_eq!(looked_up.dto_type, entry.dto_type);
}
}
#[test]
fn reserved_kinds_keep_direction_bit_consistent() {
for entry in V1_FRAME_LEDGER
.iter()
.filter(|entry| matches!(entry.status, FrameStatus::Reserved))
{
let direction_bit_set = entry.kind.0 & DIRECTION_BIT != 0;
match entry.direction {
FrameDirection::ClientToServer => assert!(
!direction_bit_set,
"reserved c2s entry {:#06x} has direction bit set",
entry.kind.0
),
FrameDirection::ServerToClient => assert!(
direction_bit_set,
"reserved s2c entry {:#06x} missing direction bit",
entry.kind.0
),
}
}
}
}