use serde::{Deserialize, Serialize};
use std::path::PathBuf;
use crate::{
PaneOutputSubscriptionId, PaneTarget, ResizePaneAdjustment, SessionName, SplitDirection,
WindowTarget,
};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum SplitWindowTarget {
Session(SessionName),
Pane(PaneTarget),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SplitWindowRequest {
pub target: SplitWindowTarget,
pub direction: SplitDirection,
#[serde(default)]
pub before: bool,
#[serde(default)]
pub environment: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SplitWindowExtRequest {
pub target: SplitWindowTarget,
pub direction: SplitDirection,
#[serde(default)]
pub before: bool,
#[serde(default)]
pub environment: Option<Vec<String>>,
#[serde(default)]
pub command: Option<Vec<String>>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SwapPaneDirection {
Down,
Up,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SwapPaneRequest {
pub source: PaneTarget,
pub target: PaneTarget,
#[serde(default)]
pub direction: Option<SwapPaneDirection>,
pub detached: bool,
#[serde(default)]
pub preserve_zoom: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LastPaneRequest {
pub target: WindowTarget,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct JoinPaneRequest {
pub source: PaneTarget,
pub target: PaneTarget,
pub direction: SplitDirection,
pub detached: bool,
#[serde(default)]
pub before: bool,
#[serde(default)]
pub full_size: bool,
#[serde(default)]
pub size: Option<PaneSplitSize>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct BreakPaneRequest {
pub source: PaneTarget,
pub target: Option<WindowTarget>,
pub name: Option<String>,
pub detached: bool,
#[serde(default)]
pub after: bool,
#[serde(default)]
pub before: bool,
#[serde(default)]
pub print_target: bool,
#[serde(default)]
pub format: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PaneSplitSize {
Absolute(u32),
Percentage(u8),
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MovePaneRequest {
pub source: PaneTarget,
pub target: PaneTarget,
pub direction: SplitDirection,
pub detached: bool,
#[serde(default)]
pub before: bool,
#[serde(default)]
pub full_size: bool,
#[serde(default)]
pub size: Option<PaneSplitSize>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct KillPaneRequest {
pub target: PaneTarget,
#[serde(default)]
pub kill_all_except: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ResizePaneRequest {
pub target: PaneTarget,
pub adjustment: ResizePaneAdjustment,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DisplayPanesRequest {
pub target: SessionName,
#[serde(default)]
pub duration_ms: Option<u64>,
#[serde(default)]
pub non_blocking: bool,
#[serde(default)]
pub no_command: bool,
#[serde(default)]
pub template: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PipePaneRequest {
pub target: PaneTarget,
#[serde(default)]
pub stdin: bool,
#[serde(default)]
pub stdout: bool,
#[serde(default)]
pub once: bool,
#[serde(default)]
pub command: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RespawnPaneRequest {
pub target: PaneTarget,
#[serde(default)]
pub kill: bool,
#[serde(default)]
pub start_directory: Option<PathBuf>,
#[serde(default)]
pub environment: Option<Vec<String>>,
#[serde(default)]
pub command: Option<Vec<String>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SelectPaneRequest {
pub target: PaneTarget,
#[serde(default)]
pub title: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum SelectPaneDirection {
Up,
Down,
Left,
Right,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SelectPaneAdjacentRequest {
pub target: PaneTarget,
pub direction: SelectPaneDirection,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SelectPaneMarkRequest {
pub target: PaneTarget,
pub clear: bool,
#[serde(default)]
pub title: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneSnapshotRequest {
pub target: PaneTarget,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum PaneOutputSubscriptionStart {
Now,
Oldest,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SubscribePaneOutputRequest {
pub target: PaneTarget,
pub start: PaneOutputSubscriptionStart,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct UnsubscribePaneOutputRequest {
pub subscription_id: PaneOutputSubscriptionId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct PaneOutputCursorRequest {
pub subscription_id: PaneOutputSubscriptionId,
#[serde(default)]
pub max_events: Option<u16>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SendKeysRequest {
pub target: PaneTarget,
pub keys: Vec<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SendKeysExtRequest {
pub target: Option<PaneTarget>,
pub keys: Vec<String>,
pub expand_formats: bool,
pub hex: bool,
#[serde(default)]
pub literal: bool,
pub dispatch_key_table: bool,
pub copy_mode_command: bool,
pub forward_mouse_event: bool,
pub reset_terminal: bool,
pub repeat_count: Option<usize>,
}