use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct VaultInfo {
pub name: String,
pub run_count: i64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct VaultsResponse {
pub status: String,
pub vaults: Vec<VaultInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct VaultExistsResponse {
pub status: String,
pub exists: bool,
pub vault: Option<VaultInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct UploadResponse {
pub status: String,
pub files_processed: u64,
pub total_bytes: u64,
pub pre_run_hooks: u64,
pub post_run_hooks: u64,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct ErrorResponse {
pub status: String,
pub error: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct HookFilter {
pub hook_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub config_filter: Option<String>,
pub output_filter: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum IncludeField {
Metadata,
Files,
Stdout,
Stderr,
Hooks,
}
#[derive(Debug, Clone, Default, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum SortOrder {
#[default]
LatestFirst,
OldestFirst,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SearchRunsRequest {
#[serde(skip_serializing_if = "Option::is_none")]
pub vault: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub from: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub to: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub exit_code: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub success: Option<bool>,
#[serde(default)]
pub hook_filters: Vec<HookFilter>,
#[serde(default)]
pub include: Vec<IncludeField>,
#[serde(default)]
pub order: SortOrder,
#[serde(skip_serializing_if = "Option::is_none")]
pub limit: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub offset: Option<i64>,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
pub struct FileInfo {
pub path: String,
pub size: i64,
#[serde(skip_serializing_if = "Option::is_none")]
pub hash: Option<String>,
pub url: String,
}