#![cfg_attr(feature = "fail-on-warnings", deny(warnings))]
#![warn(clippy::all, clippy::pedantic)]
#![allow(clippy::module_name_repetitions)]
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct AttachRect {
pub x: u16,
pub y: u16,
pub w: u16,
pub h: u16,
}
#[derive(
Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, serde::Serialize, serde::Deserialize,
)]
#[serde(rename_all = "snake_case")]
pub enum AttachLayer {
Status,
Pane,
Overlay,
FloatingPane,
Tooltip,
Cursor,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AttachFocusTarget {
None,
Pane { pane_id: ::uuid::Uuid },
Surface { surface_id: ::uuid::Uuid },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum AttachSurfaceKind {
Pane,
FloatingPane,
Modal,
Overlay,
Tooltip,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[allow(clippy::struct_excessive_bools)] pub struct AttachSurface {
pub id: ::uuid::Uuid,
pub kind: AttachSurfaceKind,
pub layer: AttachLayer,
pub z: i32,
pub rect: AttachRect,
pub content_rect: AttachRect,
#[serde(default)]
pub interactive_regions: Vec<InteractiveRegion>,
pub opaque: bool,
pub visible: bool,
pub accepts_input: bool,
pub cursor_owner: bool,
pub pane_id: Option<::uuid::Uuid>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct InteractiveRegion {
pub rect: AttachRect,
pub region_id: String,
pub owning_plugin_id: String,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct AttachScene {
pub session_id: ::uuid::Uuid,
pub focus: AttachFocusTarget,
pub surfaces: Vec<AttachSurface>,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct AttachPaneChunk {
pub pane_id: ::uuid::Uuid,
#[serde(with = "bmux_codec::serde_bytes_vec")]
pub data: Vec<u8>,
#[serde(default)]
pub stream_start: u64,
#[serde(default)]
pub stream_end: u64,
#[serde(default)]
pub stream_gap: bool,
#[serde(default)]
pub sync_update_active: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum AttachMouseProtocolMode {
#[default]
None,
Press,
PressRelease,
ButtonMotion,
AnyMotion,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum AttachMouseProtocolEncoding {
#[default]
Default,
Utf8,
Sgr,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
pub struct AttachMouseProtocolState {
#[serde(default)]
pub mode: AttachMouseProtocolMode,
#[serde(default)]
pub encoding: AttachMouseProtocolEncoding,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct AttachPaneMouseProtocol {
pub pane_id: ::uuid::Uuid,
#[serde(default)]
pub protocol: AttachMouseProtocolState,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
pub struct AttachInputModeState {
#[serde(default)]
pub application_cursor: bool,
#[serde(default)]
pub application_keypad: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct AttachPaneInputMode {
pub pane_id: ::uuid::Uuid,
#[serde(default)]
pub mode: AttachInputModeState,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum PaneSelector {
ById(::uuid::Uuid),
ByIndex(u32),
Active,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneSplitDirection {
Vertical,
Horizontal,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct PaneLaunchCommand {
pub program: String,
#[serde(default)]
pub args: Vec<String>,
#[serde(default)]
pub cwd: Option<String>,
#[serde(default)]
pub env: ::std::collections::BTreeMap<String, String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneFocusDirection {
Next,
Prev,
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum PaneLayoutNode {
Leaf {
pane_id: ::uuid::Uuid,
},
Split {
direction: PaneSplitDirection,
ratio_percent: u8,
first: Box<Self>,
second: Box<Self>,
},
}
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub struct PaneSummary {
pub id: ::uuid::Uuid,
pub index: u32,
pub name: Option<String>,
pub focused: bool,
#[serde(default)]
pub state: PaneState,
#[serde(default)]
pub state_reason: Option<String>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize, Default)]
#[serde(rename_all = "snake_case")]
pub enum PaneState {
#[default]
Running,
Exited,
}
bmux_plugin_schema_macros::schema! {
source: "bpdl/attach-layout-protocol.bpdl",
imports: {
scene: {
source: "../scene-protocol/bpdl/scene-protocol.bpdl",
crate_path: ::bmux_scene_protocol,
},
},
}