use serde::{Deserialize, Serialize};
use ts_rs::TS;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, TS)]
#[ts(export)]
pub struct CursorId(pub usize);
impl CursorId {
pub const UNDO_SENTINEL: CursorId = CursorId(usize::MAX);
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, TS)]
#[ts(export)]
pub struct SplitId(pub usize);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct LeafId(pub SplitId);
impl From<LeafId> for SplitId {
fn from(id: LeafId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
pub struct ContainerId(pub SplitId);
impl From<ContainerId> for SplitId {
fn from(id: ContainerId) -> Self {
id.0
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
#[serde(transparent)]
#[derive(TS)]
#[ts(export)]
pub struct BufferId(pub usize);
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TS)]
#[ts(export)]
pub enum SplitDirection {
Horizontal,
Vertical,
}
pub mod action;
pub mod api;
pub mod command;
pub mod hooks;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
pub struct TerminalId(pub usize);
impl std::fmt::Display for TerminalId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Terminal-{}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, TS)]
#[ts(export)]
pub struct WindowId(pub u64);
impl std::fmt::Display for WindowId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Window-{}", self.0)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct WindowTerminalId {
pub window: WindowId,
pub terminal: TerminalId,
}
impl WindowTerminalId {
pub fn new(window: WindowId, terminal: TerminalId) -> Self {
Self { window, terminal }
}
}
impl std::fmt::Display for WindowTerminalId {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}/{}", self.window, self.terminal)
}
}
pub mod config;
pub mod file_explorer;
pub mod file_uri;
pub mod menu;
pub mod overlay;
pub mod plugin_schemas;
pub mod services;
pub mod text_property;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn terminal_id_display_format() {
assert_eq!(TerminalId(0).to_string(), "Terminal-0");
assert_eq!(TerminalId(42).to_string(), "Terminal-42");
}
#[test]
fn window_id_display_format() {
assert_eq!(WindowId(1).to_string(), "Window-1");
assert_eq!(WindowId(42).to_string(), "Window-42");
}
}