use serde::{Deserialize, Serialize};
use super::CommandOutput;
use crate::{PaneId, PaneOutputSubscriptionId, PaneTarget, ResizePaneAdjustment, WindowTarget};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SplitWindowResponse {
pub pane: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SwapPaneResponse {
pub source: PaneTarget,
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MovePaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LastPaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JoinPaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BreakPaneResponse {
pub target: PaneTarget,
#[serde(default)]
pub output: Option<CommandOutput>,
}
impl BreakPaneResponse {
#[must_use]
pub const fn command_output(&self) -> Option<&CommandOutput> {
self.output.as_ref()
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct KillPaneResponse {
pub target: PaneTarget,
pub window_destroyed: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResizePaneResponse {
pub target: PaneTarget,
pub adjustment: ResizePaneAdjustment,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DisplayPanesResponse {
pub target: WindowTarget,
pub pane_count: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PipePaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RespawnPaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SelectPaneResponse {
pub target: PaneTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SendKeysResponse {
pub key_count: usize,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputCursor {
pub next_sequence: u64,
pub missed_events: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputEvent {
pub sequence: u64,
pub bytes: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneRecentOutput {
pub bytes: Vec<u8>,
pub oldest_sequence: Option<u64>,
pub newest_sequence: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputLagNotice {
pub expected_sequence: u64,
pub resume_sequence: u64,
pub missed_events: u64,
pub newest_sequence: u64,
pub recent: PaneRecentOutput,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribePaneOutputResponse {
pub subscription_id: PaneOutputSubscriptionId,
pub target: PaneTarget,
pub pane_id: PaneId,
pub cursor: PaneOutputCursor,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct UnsubscribePaneOutputResponse {
pub subscription_id: PaneOutputSubscriptionId,
pub removed: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputCursorResponse {
pub subscription_id: PaneOutputSubscriptionId,
pub cursor: PaneOutputCursor,
pub events: Vec<PaneOutputEvent>,
pub limited: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputLagResponse {
pub subscription_id: PaneOutputSubscriptionId,
pub cursor: PaneOutputCursor,
pub lag: PaneOutputLagNotice,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSnapshotCell {
pub text: String,
pub width: u8,
pub padding: bool,
pub attributes: u16,
pub fg: i32,
pub bg: i32,
pub us: i32,
pub link: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSnapshotCursor {
pub row: u16,
pub col: u16,
pub visible: bool,
pub style: u32,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSnapshotResponse {
pub cols: u16,
pub rows: u16,
pub cells: Vec<PaneSnapshotCell>,
pub cursor: PaneSnapshotCursor,
pub revision: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ListPanesResponse {
pub output: CommandOutput,
}
impl ListPanesResponse {
#[must_use]
pub fn command_output(&self) -> &CommandOutput {
&self.output
}
}