use std::{collections::HashMap, path::PathBuf, time::Duration};
use super::StatusMessage;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct VersionFile {
pub hash: String,
pub size: u64,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct VersionFileResponse {
#[serde(flatten)]
pub status: StatusMessage,
pub version: VersionFile,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CompletedFileUpload {
pub hash: String,
pub file_name: String, pub dst_dir: Option<PathBuf>, #[serde(default)]
pub num_chunks: Option<usize>,
#[serde(default)]
pub upload_results: Option<Vec<HashMap<String, String>>>,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct BeginVersionUploadRequest {
pub hash: String,
pub size: u64,
pub destination: Option<WorkspaceDestination>,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct WorkspaceDestination {
pub workspace_id: String,
#[schema(value_type = String)]
pub path: PathBuf,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct VersionUploadResponse {
#[serde(flatten)]
pub status: StatusMessage,
#[serde(flatten)]
pub file: VersionUploadStart,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
#[serde(tag = "file", rename_all = "snake_case")]
pub enum VersionUploadStart {
AwaitingParts {
upload_id: String,
part_size: u64,
num_parts: u64,
part_window: u64,
},
AlreadyStored,
#[serde(other, skip_serializing)]
Unknown,
}
#[derive(Serialize, Deserialize, Debug, ToSchema)]
pub struct VersionUploadPartResponse {
#[serde(flatten)]
pub status: StatusMessage,
pub completed: bool,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CompleteVersionUploadRequest {
pub files: Vec<CompletedFileUpload>,
pub workspace_id: Option<String>,
}
#[derive(Deserialize, Serialize, Debug)]
pub struct CleanCorruptedVersionsResponse {
#[serde(flatten)]
pub status: StatusMessage,
pub result: CleanCorruptedVersionsResult,
}
#[derive(Deserialize, Serialize, Default, Debug, Clone)]
pub struct CleanCorruptedVersionsResult {
pub scanned: u64,
pub corrupted: u64,
pub cleaned: u64,
pub errors: u64,
pub elapsed: Duration,
}