1use serde::{Deserialize, Serialize};
2
3use crate::{ClientTerminalContext, SessionName, TerminalSize};
4
5#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
7pub struct AttachSessionRequest {
8 pub target: SessionName,
10}
11
12#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
14pub struct AttachSessionExtRequest {
15 pub target: Option<SessionName>,
17 #[serde(default)]
19 pub detach_other_clients: bool,
20 #[serde(default)]
22 pub kill_other_clients: bool,
23 #[serde(default)]
25 pub read_only: bool,
26 #[serde(default)]
28 pub skip_environment_update: bool,
29 #[serde(default)]
31 pub flags: Option<Vec<String>>,
32}
33
34#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
36pub struct AttachSessionExt2Request {
37 #[serde(default)]
39 pub target: Option<SessionName>,
40 #[serde(default)]
42 pub target_spec: Option<String>,
43 #[serde(default)]
45 pub detach_other_clients: bool,
46 #[serde(default)]
48 pub kill_other_clients: bool,
49 #[serde(default)]
51 pub read_only: bool,
52 #[serde(default)]
54 pub skip_environment_update: bool,
55 #[serde(default)]
57 pub flags: Option<Vec<String>>,
58 #[serde(default)]
60 pub working_directory: Option<String>,
61 #[serde(default)]
63 pub client_terminal: ClientTerminalContext,
64 #[serde(default)]
66 pub client_size: Option<TerminalSize>,
67}
68
69#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
71pub struct AttachSessionExt3Request {
72 #[serde(default)]
74 pub target: Option<SessionName>,
75 #[serde(default)]
77 pub target_spec: Option<String>,
78 #[serde(default)]
80 pub detach_other_clients: bool,
81 #[serde(default)]
83 pub kill_other_clients: bool,
84 #[serde(default)]
86 pub read_only: bool,
87 #[serde(default)]
89 pub skip_environment_update: bool,
90 #[serde(default)]
92 pub flags: Option<Vec<String>>,
93 #[serde(default)]
95 pub working_directory: Option<String>,
96 #[serde(default)]
98 pub client_terminal: ClientTerminalContext,
99 #[serde(default)]
101 pub client_size: Option<TerminalSize>,
102 #[serde(default)]
104 pub attach_capabilities: Vec<String>,
105}
106
107impl AttachSessionExt3Request {
108 #[must_use]
110 pub fn from_ext2(request: AttachSessionExt2Request, attach_capabilities: Vec<String>) -> Self {
111 Self {
112 target: request.target,
113 target_spec: request.target_spec,
114 detach_other_clients: request.detach_other_clients,
115 kill_other_clients: request.kill_other_clients,
116 read_only: request.read_only,
117 skip_environment_update: request.skip_environment_update,
118 flags: request.flags,
119 working_directory: request.working_directory,
120 client_terminal: request.client_terminal,
121 client_size: request.client_size,
122 attach_capabilities,
123 }
124 }
125
126 #[must_use]
128 pub fn into_ext2_and_capabilities(self) -> (AttachSessionExt2Request, Vec<String>) {
129 (
130 AttachSessionExt2Request {
131 target: self.target,
132 target_spec: self.target_spec,
133 detach_other_clients: self.detach_other_clients,
134 kill_other_clients: self.kill_other_clients,
135 read_only: self.read_only,
136 skip_environment_update: self.skip_environment_update,
137 flags: self.flags,
138 working_directory: self.working_directory,
139 client_terminal: self.client_terminal,
140 client_size: self.client_size,
141 },
142 self.attach_capabilities,
143 )
144 }
145}
146
147#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
149pub struct SwitchClientRequest {
150 pub target: SessionName,
152}
153
154#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
156pub struct SwitchClientExtRequest {
157 pub target: Option<SessionName>,
159 pub key_table: Option<String>,
161}
162
163#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
165pub struct SwitchClientExt2Request {
166 pub target: Option<SessionName>,
168 #[serde(default)]
170 pub key_table: Option<String>,
171 #[serde(default)]
173 pub last_session: bool,
174 #[serde(default)]
176 pub next_session: bool,
177 #[serde(default)]
179 pub previous_session: bool,
180 #[serde(default)]
182 pub toggle_read_only: bool,
183 #[serde(default)]
185 pub flags: Option<Vec<String>>,
186 #[serde(default)]
188 pub sort_order: Option<String>,
189 #[serde(default)]
191 pub skip_environment_update: bool,
192}
193
194#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
196pub struct SwitchClientExt3Request {
197 #[serde(default)]
199 pub target_client: Option<String>,
200 #[serde(default)]
202 pub target: Option<String>,
203 #[serde(default)]
205 pub key_table: Option<String>,
206 #[serde(default)]
208 pub last_session: bool,
209 #[serde(default)]
211 pub next_session: bool,
212 #[serde(default)]
214 pub previous_session: bool,
215 #[serde(default)]
217 pub toggle_read_only: bool,
218 #[serde(default)]
220 pub sort_order: Option<String>,
221 #[serde(default)]
223 pub skip_environment_update: bool,
224 #[serde(default)]
226 pub zoom: bool,
227}
228
229#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Serialize, Deserialize)]
231pub struct DetachClientRequest;
232
233#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
235pub struct DetachClientExtRequest {
236 #[serde(default)]
238 pub target_client: Option<String>,
239 #[serde(default)]
241 pub all_other_clients: bool,
242 #[serde(default)]
244 pub target_session: Option<SessionName>,
245 #[serde(default)]
247 pub kill_on_detach: bool,
248 #[serde(default)]
250 pub exec_command: Option<String>,
251}
252
253#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
255pub struct RefreshClientRequest {
256 #[serde(default)]
258 pub target_client: Option<String>,
259 #[serde(default)]
261 pub adjustment: Option<u32>,
262 #[serde(default)]
264 pub clear_pan: bool,
265 #[serde(default)]
267 pub pan_left: bool,
268 #[serde(default)]
270 pub pan_right: bool,
271 #[serde(default)]
273 pub pan_up: bool,
274 #[serde(default)]
276 pub pan_down: bool,
277 #[serde(default)]
279 pub status_only: bool,
280 #[serde(default)]
282 pub clipboard_query: bool,
283 #[serde(default)]
285 pub flags: Option<String>,
286 #[serde(default)]
288 pub flags_alias: Option<String>,
289 #[serde(default)]
291 pub subscriptions: Vec<String>,
292 #[serde(default)]
294 pub subscriptions_format: Vec<String>,
295 #[serde(default)]
297 pub control_size: Option<String>,
298 #[serde(default)]
300 pub colour_report: Option<String>,
301}
302
303#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
305pub struct ListClientsRequest {
306 #[serde(default)]
308 pub format: Option<String>,
309 #[serde(default)]
311 pub filter: Option<String>,
312 #[serde(default)]
314 pub sort_order: Option<String>,
315 #[serde(default)]
317 pub reversed: bool,
318 #[serde(default)]
320 pub target_session: Option<SessionName>,
321}
322
323#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
325pub struct SuspendClientRequest {
326 #[serde(default)]
328 pub target_client: Option<String>,
329}