1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
5pub struct AdminCreateCustomerRequest {
6 pub name: String,
7 #[serde(skip_serializing_if = "Option::is_none")]
8 pub plan: Option<String>,
9}
10
11#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
12pub struct AdminCreateCustomerResponse {
13 pub id: String,
14 pub name: String,
15 pub created_at: i64,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub plan: Option<String>,
18}
19
20#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
21pub struct AdminCustomerListQuery {
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub customer_id: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub name: Option<String>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub plan: Option<String>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub limit: Option<i32>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub offset: Option<i32>,
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
35pub struct AdminCustomerListResponse {
36 pub customers: Vec<AdminCustomerResponse>,
37 pub limit: i64,
38 pub offset: i64,
39}
40
41#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
42pub struct AdminCustomerResponse {
43 pub id: String,
44 pub name: String,
45 pub created_at: i64,
46 #[serde(skip_serializing_if = "Option::is_none")]
47 pub plan: Option<String>,
48 #[serde(skip_serializing_if = "Option::is_none")]
49 pub suspended_at: Option<i64>,
50}
51
52#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
53pub struct AdminUpdateCustomerRequest {
54 #[serde(skip_serializing_if = "Option::is_none")]
55 pub name: Option<String>,
56 #[serde(skip_serializing_if = "Option::is_none")]
57 pub plan: Option<String>,
58 #[serde(skip_serializing_if = "Option::is_none")]
59 pub suspended: Option<bool>,
60}
61
62#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
63pub struct UserListQuery {
64 #[serde(skip_serializing_if = "Option::is_none")]
65 pub customer_id: Option<String>,
66 #[serde(skip_serializing_if = "Option::is_none")]
67 pub email: Option<String>,
68 #[serde(skip_serializing_if = "Option::is_none")]
69 pub status: Option<String>,
70 #[serde(skip_serializing_if = "Option::is_none")]
71 pub keycloak_user_id: Option<String>,
72 #[serde(skip_serializing_if = "Option::is_none")]
73 pub created_from: Option<i64>,
74 #[serde(skip_serializing_if = "Option::is_none")]
75 pub created_to: Option<i64>,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub limit: Option<i32>,
78 #[serde(skip_serializing_if = "Option::is_none")]
79 pub cursor: Option<String>,
80}
81
82#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
83pub struct UserListResponse {
84 pub users: Vec<UserResponse>,
85 #[serde(skip_serializing_if = "Option::is_none")]
86 pub next_cursor: Option<String>,
87}
88
89#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
90pub struct UserResponse {
91 pub id: String,
92 pub keycloak_user_id: String,
93 pub customer_id: String,
94 pub email: String,
95 pub status: String,
96 pub groups: Vec<String>,
97 pub created_at: i64,
98 pub updated_at: i64,
99 #[serde(skip_serializing_if = "Option::is_none")]
100 pub disabled_at: Option<i64>,
101 #[serde(skip_serializing_if = "Option::is_none")]
102 pub display_name: Option<String>,
103 #[serde(skip_serializing_if = "Option::is_none")]
104 pub last_synced_at: Option<i64>,
105 #[serde(skip_serializing_if = "Option::is_none")]
106 pub metadata: Option<Value>,
107}
108
109#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
110pub struct UserCreateRequest {
111 pub email: String,
112 pub customer_id: String,
113 #[serde(skip_serializing_if = "Option::is_none")]
114 pub display_name: Option<String>,
115 #[serde(skip_serializing_if = "Option::is_none")]
116 pub groups: Option<Vec<String>>,
117 #[serde(skip_serializing_if = "Option::is_none")]
118 pub metadata: Option<Value>,
119 #[serde(skip_serializing_if = "Option::is_none")]
120 pub status: Option<String>,
121}
122
123#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
124pub struct UserPatchRequest {
125 #[serde(skip_serializing_if = "Option::is_none")]
126 pub display_name: Option<String>,
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub groups: Option<Vec<String>>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 pub metadata: Option<Value>,
131 #[serde(skip_serializing_if = "Option::is_none")]
132 pub status: Option<String>,
133}
134
135#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
136pub struct UserGroupsReplaceRequest {
137 pub groups: Vec<String>,
138}
139
140#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
141pub struct ResetCredentialsRequest {
142 #[serde(skip_serializing_if = "Option::is_none")]
143 pub send_email: Option<bool>,
144}
145
146#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
147pub struct AdminCreateKeyRequest {
148 pub customer_id: String,
149 #[serde(skip_serializing_if = "Option::is_none")]
150 pub expires_at: Option<i64>,
151 #[serde(skip_serializing_if = "Option::is_none")]
152 pub key_type: Option<String>,
153 #[serde(skip_serializing_if = "Option::is_none")]
154 pub name: Option<String>,
155 #[serde(skip_serializing_if = "Option::is_none")]
156 pub scopes: Option<Vec<String>>,
157}
158
159#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
160pub struct AdminCreateKeyResponse {
161 pub api_key_id: String,
162 pub api_key: String,
163 pub customer_id: String,
164 pub key_type: String,
165 pub scopes: Vec<String>,
166 #[serde(skip_serializing_if = "Option::is_none")]
167 pub expires_at: Option<i64>,
168}
169
170#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
171pub struct AdminRevokeKeyRequest {
172 pub api_key_id: String,
173}
174
175#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
176pub struct AdminRevokeKeyResponse {
177 pub api_key_id: String,
178}
179
180#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
181pub struct ApiKeyIntrospection {
182 pub active: bool,
183 pub api_key_id: String,
184 pub customer_id: String,
185 pub key_type: String,
186 pub scopes: Vec<String>,
187 #[serde(skip_serializing_if = "Option::is_none")]
188 pub expires_at: Option<i64>,
189}
190
191#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
192pub struct ArtifactPresignRequest {
193 pub filename: String,
194 pub platform: String,
195}
196
197#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
198pub struct ArtifactPresignResponse {
199 pub artifact_id: String,
200 pub object_key: String,
201 pub upload_url: String,
202 pub expires_at: i64,
203}
204
205#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
206pub struct ArtifactRegisterRequest {
207 pub artifact_id: String,
208 pub object_key: String,
209 pub checksum: String,
210 pub size: i64,
211 pub platform: String,
212}
213
214#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
215pub struct ArtifactRegisterResponse {
216 pub id: String,
217 pub release_id: String,
218 pub object_key: String,
219 pub checksum: String,
220 pub size: i64,
221 pub platform: String,
222 pub created_at: i64,
223}
224
225#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
226pub struct ArtifactSummary {
227 pub id: String,
228 pub object_key: String,
229 pub platform: String,
230 pub checksum: String,
231 pub size: i64,
232}
233
234#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
235pub struct AuditEventListQuery {
236 #[serde(skip_serializing_if = "Option::is_none")]
237 pub customer_id: Option<String>,
238 #[serde(skip_serializing_if = "Option::is_none")]
239 pub actor: Option<String>,
240 #[serde(skip_serializing_if = "Option::is_none")]
241 pub event: Option<String>,
242 #[serde(skip_serializing_if = "Option::is_none")]
243 pub created_from: Option<i64>,
244 #[serde(skip_serializing_if = "Option::is_none")]
245 pub created_to: Option<i64>,
246 #[serde(skip_serializing_if = "Option::is_none")]
247 pub limit: Option<i32>,
248 #[serde(skip_serializing_if = "Option::is_none")]
249 pub offset: Option<i32>,
250}
251
252#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
253pub struct AuditEventListResponse {
254 pub events: Vec<AuditEventResponse>,
255 pub limit: i64,
256 pub offset: i64,
257}
258
259#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
260pub struct AuditEventResponse {
261 pub id: String,
262 pub actor: String,
263 pub event: String,
264 pub created_at: i64,
265 #[serde(skip_serializing_if = "Option::is_none")]
266 pub customer_id: Option<String>,
267 #[serde(skip_serializing_if = "Option::is_none")]
268 pub payload: Option<Value>,
269}
270
271#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
272pub struct DownloadTokenRequest {
273 pub artifact_id: String,
274 #[serde(skip_serializing_if = "Option::is_none")]
275 pub expires_in_seconds: Option<i32>,
276 #[serde(skip_serializing_if = "Option::is_none")]
277 pub purpose: Option<String>,
278}
279
280#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
281pub struct DownloadTokenResponse {
282 pub download_url: String,
283 pub expires_at: i64,
284}
285
286#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
287pub struct EntitlementCreateRequest {
288 pub product: String,
289 pub starts_at: i64,
290 #[serde(skip_serializing_if = "Option::is_none")]
291 pub ends_at: Option<i64>,
292 #[serde(skip_serializing_if = "Option::is_none")]
293 pub metadata: Option<Value>,
294}
295
296#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
297pub struct EntitlementUpdateRequest {
298 #[serde(skip_serializing_if = "Option::is_none")]
299 pub product: Option<String>,
300 #[serde(skip_serializing_if = "Option::is_none")]
301 pub starts_at: Option<i64>,
302 #[serde(skip_serializing_if = "Option::is_none")]
303 pub ends_at: Option<i64>,
304 #[serde(skip_serializing_if = "Option::is_none")]
305 pub metadata: Option<Value>,
306}
307
308#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
309pub struct EntitlementResponse {
310 pub id: String,
311 pub customer_id: String,
312 pub product: String,
313 pub starts_at: i64,
314 #[serde(skip_serializing_if = "Option::is_none")]
315 pub ends_at: Option<i64>,
316 #[serde(skip_serializing_if = "Option::is_none")]
317 pub metadata: Option<Value>,
318}
319
320#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
321pub struct EntitlementListQuery {
322 #[serde(skip_serializing_if = "Option::is_none")]
323 pub product: Option<String>,
324 #[serde(skip_serializing_if = "Option::is_none")]
325 pub limit: Option<i32>,
326 #[serde(skip_serializing_if = "Option::is_none")]
327 pub offset: Option<i32>,
328}
329
330#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
331pub struct EntitlementListResponse {
332 pub entitlements: Vec<EntitlementResponse>,
333 pub limit: i64,
334 pub offset: i64,
335}
336
337#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
338pub struct ErrorBody {
339 pub error: ErrorDetail,
340}
341
342#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
343pub struct ErrorDetail {
344 pub code: String,
345 pub message: String,
346}
347
348#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
349pub struct EnterpriseErrorBody {
350 pub error: EnterpriseErrorDetail,
351}
352
353#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
354pub struct EnterpriseErrorDetail {
355 pub code: String,
356 pub message: String,
357}
358
359#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
360pub struct HealthResponse {
361 pub status: String,
362}
363
364#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
365pub struct ReleaseCreateRequest {
366 pub product: String,
367 pub version: String,
368}
369
370#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
371pub struct ReleaseResponse {
372 pub id: String,
373 pub product: String,
374 pub version: String,
375 pub status: String,
376 pub created_at: i64,
377 #[serde(skip_serializing_if = "Option::is_none")]
378 pub published_at: Option<i64>,
379 #[serde(skip_serializing_if = "Option::is_none")]
380 pub artifacts: Option<Vec<ArtifactSummary>>,
381}
382
383#[derive(Clone, Debug, Serialize, Deserialize, Default, PartialEq, Eq)]
384pub struct ReleaseListQuery {
385 #[serde(skip_serializing_if = "Option::is_none")]
386 pub product: Option<String>,
387 #[serde(skip_serializing_if = "Option::is_none")]
388 pub version: Option<String>,
389 #[serde(skip_serializing_if = "Option::is_none")]
390 pub status: Option<String>,
391 #[serde(skip_serializing_if = "Option::is_none")]
392 pub include_artifacts: Option<bool>,
393 #[serde(skip_serializing_if = "Option::is_none")]
394 pub limit: Option<i32>,
395 #[serde(skip_serializing_if = "Option::is_none")]
396 pub offset: Option<i32>,
397}
398
399#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
400pub struct ReleaseListResponse {
401 pub releases: Vec<ReleaseResponse>,
402 pub limit: i64,
403 pub offset: i64,
404}