cnctd_service_ssh/sessions/
types.rs1use schemars::JsonSchema;
4use serde::{Deserialize, Serialize};
5use std::collections::HashMap;
6
7pub fn default_cols() -> u16 {
9 120
10}
11
12pub fn default_rows() -> u16 {
14 40
15}
16
17#[derive(Debug, Clone, Deserialize, JsonSchema)]
19pub struct ShellSessionCreateArgs {
20 pub target_id: String,
22
23 pub name: Option<String>,
25
26 pub shell: Option<String>,
28
29 #[serde(default = "default_cols")]
31 pub cols: u16,
32
33 #[serde(default = "default_rows")]
35 pub rows: u16,
36
37 pub client_id: Option<String>,
39
40 #[serde(default)]
42 pub env: HashMap<String, String>,
43}
44
45#[derive(Debug, Clone, Deserialize, JsonSchema)]
47pub struct ShellSessionWriteArgs {
48 pub session_id: String,
50
51 pub input: String,
53
54 #[serde(default)]
56 pub newline: bool,
57}
58
59#[derive(Debug, Clone, Copy, Deserialize, Serialize, JsonSchema, Default, PartialEq)]
61#[serde(rename_all = "snake_case")]
62pub enum OutputFormat {
63 #[default]
65 Raw,
66 Screen,
68 Both,
70 Stripped,
72}
73
74#[derive(Debug, Clone, Deserialize, JsonSchema)]
76pub struct ShellSessionReadArgs {
77 pub session_id: String,
79
80 #[serde(default)]
82 pub format: OutputFormat,
83
84 #[serde(default = "default_true")]
86 pub consume: bool,
87
88 #[serde(default)]
90 pub wait_ms: u64,
91
92 #[serde(default)]
94 pub min_bytes: usize,
95
96 #[serde(default)]
99 pub wait_for_pattern: Option<String>,
100
101 #[serde(default)]
104 pub wait_for_stable_ms: Option<u64>,
105}
106
107fn default_true() -> bool {
108 true
109}
110
111#[derive(Debug, Clone, Deserialize, JsonSchema)]
113pub struct ShellSessionListArgs {
114 pub target_id: Option<String>,
116
117 pub client_id: Option<String>,
119
120 #[serde(default = "default_true")]
122 pub include_disconnected: bool,
123}
124
125#[derive(Debug, Clone, Deserialize, JsonSchema)]
127pub struct ShellSessionReconnectArgs {
128 pub session_id: String,
130}
131
132#[derive(Debug, Clone, Deserialize, JsonSchema)]
134pub struct ShellSessionResizeArgs {
135 pub session_id: String,
137
138 pub cols: u16,
140
141 pub rows: u16,
143}
144
145#[derive(Debug, Clone, Deserialize, JsonSchema)]
147pub struct ShellSessionCloseArgs {
148 pub session_id: String,
150
151 #[serde(default)]
153 pub force: bool,
154}
155
156#[derive(Debug, Clone, Copy, Serialize, Deserialize, PartialEq, Eq, JsonSchema)]
158#[serde(rename_all = "snake_case")]
159pub enum SessionState {
160 Active,
162 Disconnected,
164 Closed,
166}
167
168#[derive(Debug, Clone, Serialize, JsonSchema)]
170pub struct ScreenState {
171 pub lines: Vec<String>,
173
174 pub cursor: (u16, u16),
176
177 pub size: (u16, u16),
179
180 pub alternate_screen: bool,
182
183 #[serde(skip_serializing_if = "Option::is_none")]
185 pub title: Option<String>,
186}
187
188#[derive(Debug, Clone, Serialize, JsonSchema)]
190pub struct ShellSessionCreateResult {
191 pub session_id: String,
193
194 pub info: ShellSessionInfo,
196
197 pub screen: ScreenState,
199}
200
201#[derive(Debug, Clone, Serialize, JsonSchema)]
203pub struct ShellSessionWriteResult {
204 pub session_id: String,
206
207 pub bytes_sent: usize,
209}
210
211#[derive(Debug, Clone, Serialize, JsonSchema)]
213pub struct ShellSessionReadResult {
214 pub session_id: String,
216
217 #[serde(skip_serializing_if = "Option::is_none")]
219 pub raw: Option<String>,
220
221 #[serde(skip_serializing_if = "Option::is_none")]
223 pub screen: Option<ScreenState>,
224
225 pub buffer_size: usize,
227
228 pub truncated: bool,
230
231 pub state: SessionState,
233
234 #[serde(skip_serializing_if = "Option::is_none")]
236 pub pattern_matched: Option<bool>,
237
238 #[serde(skip_serializing_if = "Option::is_none")]
240 pub stabilized: Option<bool>,
241}
242
243#[derive(Debug, Clone, Serialize, JsonSchema)]
245pub struct ShellSessionInfo {
246 pub id: String,
248
249 pub target_id: String,
251
252 #[serde(skip_serializing_if = "Option::is_none")]
254 pub name: Option<String>,
255
256 #[serde(skip_serializing_if = "Option::is_none")]
258 pub client_id: Option<String>,
259
260 pub state: SessionState,
262
263 pub created_at: String,
265
266 pub last_activity: String,
268
269 pub size: (u16, u16),
271}
272
273#[derive(Debug, Clone, Serialize, JsonSchema)]
275pub struct ShellSessionListResult {
276 pub sessions: Vec<ShellSessionInfo>,
278}
279
280#[derive(Debug, Clone, Serialize, JsonSchema)]
282pub struct ShellSessionReconnectResult {
283 pub session_id: String,
285
286 pub info: ShellSessionInfo,
288
289 pub screen: ScreenState,
291}
292
293#[derive(Debug, Clone, Serialize, JsonSchema)]
295pub struct ShellSessionResizeResult {
296 pub session_id: String,
298
299 pub size: (u16, u16),
301}
302
303#[derive(Debug, Clone, Serialize, JsonSchema)]
305pub struct ShellSessionCloseResult {
306 pub session_id: String,
308
309 pub closed: bool,
311}