1use serde::{Deserialize, Serialize};
2
3use ts_rs::TS;
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, TS)]
7#[ts(export)]
8pub struct CursorId(pub usize);
9
10impl CursorId {
11 pub const UNDO_SENTINEL: CursorId = CursorId(usize::MAX);
14}
15
16#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, TS)]
18#[ts(export)]
19pub struct SplitId(pub usize);
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
23pub struct LeafId(pub SplitId);
24
25impl From<LeafId> for SplitId {
26 fn from(id: LeafId) -> Self {
27 id.0
28 }
29}
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
33pub struct ContainerId(pub SplitId);
34
35impl From<ContainerId> for SplitId {
36 fn from(id: ContainerId) -> Self {
37 id.0
38 }
39}
40
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
43#[serde(transparent)]
44#[derive(TS)]
45#[ts(export)]
46pub struct BufferId(pub usize);
47
48#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, TS)]
50#[ts(export)]
51pub enum SplitDirection {
52 Horizontal,
53 Vertical,
54}
55
56pub mod action;
57pub mod api;
58pub mod command;
59pub mod hooks;
60
61#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, TS)]
63#[ts(export)]
64pub struct TerminalId(pub usize);
65
66impl std::fmt::Display for TerminalId {
67 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
68 write!(f, "Terminal-{}", self.0)
69 }
70}
71
72#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, serde::Serialize, serde::Deserialize, TS)]
88#[ts(export)]
89pub struct WindowId(pub u64);
90
91impl std::fmt::Display for WindowId {
92 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
93 write!(f, "Window-{}", self.0)
94 }
95}
96
97#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
108pub struct WindowTerminalId {
109 pub window: WindowId,
110 pub terminal: TerminalId,
111}
112
113impl WindowTerminalId {
114 pub fn new(window: WindowId, terminal: TerminalId) -> Self {
115 Self { window, terminal }
116 }
117}
118
119impl std::fmt::Display for WindowTerminalId {
120 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
121 write!(f, "{}/{}", self.window, self.terminal)
122 }
123}
124
125pub mod config;
126pub mod display_width;
127pub mod file_explorer;
128pub mod file_uri;
129pub mod menu;
130pub mod overlay;
131pub mod plugin_schemas;
132pub mod services;
133pub mod text_property;
134
135#[cfg(test)]
136mod tests {
137 use super::*;
138
139 #[test]
140 fn terminal_id_display_format() {
141 assert_eq!(TerminalId(0).to_string(), "Terminal-0");
142 assert_eq!(TerminalId(42).to_string(), "Terminal-42");
143 }
144
145 #[test]
146 fn window_id_display_format() {
147 assert_eq!(WindowId(1).to_string(), "Window-1");
148 assert_eq!(WindowId(42).to_string(), "Window-42");
149 }
150}