1pub mod git;
4pub mod lsp;
5pub mod organization;
6pub mod process;
7pub mod snapshot;
8pub mod volume;
9pub mod workspace;
10
11use chrono::{DateTime, Utc};
12pub use git::*;
13pub use lsp::*;
14pub use organization::*;
15pub use process::*;
16use serde::{Deserialize, Serialize};
17pub use snapshot::*;
18use uuid::Uuid;
19pub use volume::*;
20pub use workspace::*;
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25#[serde(rename_all = "camelCase")]
26pub struct Sandbox {
27 pub id: Uuid,
28 pub organization_id: Uuid,
29 pub target: String,
30 pub snapshot: String,
31 pub user: String,
32 pub env: std::collections::HashMap<String, String>,
33 pub cpu: u32,
34 pub gpu: u32,
35 pub memory: u32,
36 pub disk: u32,
37 pub public: bool,
38 pub network_block_all: bool,
39 pub network_allow_list: Option<Vec<String>>,
40 pub labels: std::collections::HashMap<String, String>,
41 pub volumes: Vec<SandboxVolumeAttachment>,
42 pub build_info: Option<BuildInfo>,
43 pub state: SandboxState,
44 pub desired_state: SandboxState,
45 pub error_reason: Option<String>,
46 pub backup_state: String,
47 pub auto_stop_interval: u32,
48 pub auto_archive_interval: u32,
49 pub auto_delete_interval: i32,
50 pub class: String,
51 pub created_at: DateTime<Utc>,
52 pub updated_at: DateTime<Utc>,
53 pub runner_domain: Option<String>,
54 pub daemon_version: Option<String>,
55}
56
57#[derive(Debug, Clone, Serialize, Deserialize)]
59#[serde(rename_all = "snake_case")]
60pub enum SandboxState {
61 Creating,
62 Restoring,
63 Destroyed,
64 Destroying,
65 Started,
66 Stopped,
67 Starting,
68 Stopping,
69 Error,
70 BuildFailed,
71 PendingBuild,
72 BuildingSnapshot,
73 Unknown,
74 PullingSnapshot,
75 Archived,
76 Archiving,
77}
78
79#[derive(Debug, Clone, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct BuildInfo {
83 pub dockerfile_content: Option<String>,
84 pub context_hashes: Option<Vec<String>>,
85}
86
87#[derive(Debug, Clone, Serialize, Deserialize)]
89#[serde(rename_all = "camelCase")]
90pub struct CreateBuildInfo {
91 pub dockerfile_content: String,
92 pub context_hashes: Option<Vec<String>>,
93}
94
95#[derive(Debug, Clone, Serialize, Deserialize)]
97#[serde(rename_all = "camelCase")]
98pub struct CreateSandboxParams {
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub snapshot: Option<String>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub user: Option<String>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub env: Option<std::collections::HashMap<String, String>>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub labels: Option<std::collections::HashMap<String, String>>,
107 #[serde(skip_serializing_if = "Option::is_none")]
108 pub public: Option<bool>,
109 #[serde(skip_serializing_if = "Option::is_none")]
110 pub network_block_all: Option<bool>,
111 #[serde(skip_serializing_if = "Option::is_none")]
112 pub network_allow_list: Option<String>,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub class: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub target: Option<String>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub cpu: Option<u32>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub gpu: Option<u32>,
121 #[serde(skip_serializing_if = "Option::is_none")]
123 pub memory: Option<u32>,
124 #[serde(skip_serializing_if = "Option::is_none")]
126 pub disk: Option<u32>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub auto_stop_interval: Option<u32>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub auto_archive_interval: Option<u32>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub auto_delete_interval: Option<i32>,
133 #[serde(skip_serializing_if = "Option::is_none")]
134 pub volumes: Option<Vec<SandboxVolumeAttachment>>,
135 #[serde(skip_serializing_if = "Option::is_none")]
136 pub build_info: Option<CreateBuildInfo>,
137}
138
139impl Default for CreateSandboxParams {
140 fn default() -> Self {
141 Self {
142 snapshot: None,
143 user: None,
144 env: None,
145 labels: None,
146 public: None,
147 network_block_all: None,
148 network_allow_list: None,
149 class: Some("small".to_string()),
150 target: None,
151 cpu: None,
152 gpu: None,
153 memory: None,
154 disk: None,
155 auto_stop_interval: None,
156 auto_archive_interval: None,
157 auto_delete_interval: None,
158 volumes: None,
159 build_info: None,
160 }
161 }
162}
163
164#[derive(Debug, Clone, Serialize, Deserialize)]
166pub struct ExecuteRequest {
167 pub command: String,
168 #[serde(skip_serializing_if = "Option::is_none")]
169 pub cwd: Option<String>,
170 #[serde(skip_serializing_if = "Option::is_none")]
171 pub timeout: Option<u64>,
172}
173
174#[derive(Debug, Clone, Serialize, Deserialize)]
176#[serde(rename_all = "camelCase")]
177pub struct ExecuteResponse {
178 pub exit_code: i32,
179 pub result: String,
180}
181
182#[derive(Debug, Clone, Serialize, Deserialize)]
184#[serde(rename_all = "camelCase")]
185pub struct PortPreviewUrl {
186 pub url: String,
187 pub token: String,
188 #[serde(skip_serializing_if = "Option::is_none")]
189 pub legacy_proxy_url: Option<String>,
190}
191
192#[derive(Debug, Clone, Serialize)]
194pub struct FileUploadRequest {
195 pub path: String,
196 pub content: Vec<u8>,
197 #[serde(skip_serializing_if = "Option::is_none")]
198 pub permissions: Option<String>,
199}
200
201#[derive(Debug, Clone, Deserialize)]
203#[serde(rename_all = "camelCase")]
204pub struct FileInfo {
205 pub name: String,
206 #[serde(rename = "isDir")]
207 pub is_directory: bool,
208 pub size: u64,
209 #[serde(rename = "modTime")]
210 pub modified_at: String, pub mode: String,
212 pub owner: String,
213 pub group: String,
214 pub permissions: String,
215}
216
217#[derive(Debug, Clone, Deserialize)]
219#[serde(rename_all = "camelCase")]
220pub struct ApiError {
221 pub status_code: u16,
222 pub timestamp: DateTime<Utc>,
223 pub path: String,
224 pub error: String,
225 pub message: String,
226}
227
228#[derive(Debug, Clone, Serialize, Deserialize)]
230#[serde(rename_all = "lowercase")]
231pub enum Language {
232 Python,
233 Javascript,
234 Typescript,
235 Rust,
236 Go,
237 Java,
238 Ruby,
239 Php,
240 Shell,
241}
242
243#[derive(Debug, Clone, Deserialize)]
245#[serde(rename_all = "camelCase")]
246pub struct Match {
247 pub file: String,
248 #[serde(rename = "line")]
249 pub line_number: i32,
250 pub content: String,
251}
252
253#[derive(Debug, Clone)]
255pub struct FindResult {
256 pub file: String,
257 pub line_number: usize,
258 pub content: String,
259}
260
261#[derive(Debug, Clone, Deserialize)]
263#[serde(rename_all = "camelCase")]
264pub struct ReplaceResult {
265 pub file: Option<String>,
266 pub success: Option<bool>,
267}
268
269#[derive(Debug, Clone, Deserialize)]
271#[serde(rename_all = "camelCase")]
272pub struct SearchFilesResponse {
273 pub files: Vec<String>,
274}
275
276#[derive(Debug, Clone, Serialize, Deserialize)]
278#[serde(rename_all = "camelCase")]
279pub struct BackupResponse {
280 pub backup_id: String,
281 pub name: Option<String>,
282 pub created_at: DateTime<Utc>,
283}
284
285#[derive(Debug, Clone, Default)]
287pub struct BuildLogsOptions {
288 pub follow: bool,
290}
291
292#[derive(Debug, Clone, Serialize, Deserialize)]
294pub struct Labels {
295 pub labels: std::collections::HashMap<String, String>,
296}