1use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
10pub struct VaultInfo {
11 pub name: String,
12 pub run_count: i64,
13}
14
15#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
17pub struct VaultsResponse {
18 pub status: String,
19 pub vaults: Vec<VaultInfo>,
20}
21
22#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
24pub struct VaultExistsResponse {
25 pub status: String,
26 pub exists: bool,
27 pub vault: Option<VaultInfo>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
32pub struct UploadResponse {
33 pub status: String,
34 pub files_processed: u64,
35 pub total_bytes: u64,
36 pub pre_run_hooks: u64,
37 pub post_run_hooks: u64,
38}
39
40#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
42pub struct ErrorResponse {
43 pub status: String,
44 pub error: String,
45}
46
47#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
53pub struct HookFilter {
54 pub hook_id: String,
56 #[serde(skip_serializing_if = "Option::is_none")]
58 pub config_filter: Option<String>,
59 pub output_filter: String,
61}
62
63#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
65#[serde(rename_all = "snake_case")]
66pub enum IncludeField {
67 Metadata,
68 Files,
69 Stdout,
70 Stderr,
71 Hooks,
72}
73
74#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
76#[serde(rename_all = "snake_case")]
77pub enum SortOrder {
78 #[default]
79 LatestFirst,
80 OldestFirst,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
85pub struct SearchRunsRequest {
86 #[serde(skip_serializing_if = "Option::is_none")]
88 pub vault: Option<String>,
89 #[serde(skip_serializing_if = "Option::is_none")]
91 pub from: Option<String>,
92 #[serde(skip_serializing_if = "Option::is_none")]
94 pub to: Option<String>,
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub exit_code: Option<i32>,
98 #[serde(skip_serializing_if = "Option::is_none")]
100 pub success: Option<bool>,
101 #[serde(default)]
103 pub hook_filters: Vec<HookFilter>,
104 #[serde(default)]
106 pub include: Vec<IncludeField>,
107 #[serde(default)]
109 pub order: SortOrder,
110 #[serde(skip_serializing_if = "Option::is_none")]
112 pub limit: Option<i64>,
113 #[serde(skip_serializing_if = "Option::is_none")]
115 pub offset: Option<i64>,
116}
117
118#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
120pub struct FileInfo {
121 pub path: String,
122 pub size: i64,
123 #[serde(skip_serializing_if = "Option::is_none")]
124 pub hash: Option<String>,
125 pub url: String,
126}