use std::{collections::HashMap, path::PathBuf, time::Duration};
use crate::model::MerkleHash;
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(Clone)]
pub enum MultipartLargeFileUploadStatus {
Pending,
Completed,
Failed,
}
#[derive(Clone)]
pub struct MultipartLargeFileUpload {
pub local_path: PathBuf, pub dst_dir: Option<PathBuf>, pub hash: MerkleHash, pub size: u64, pub status: MultipartLargeFileUploadStatus, pub reason: Option<String>, }
#[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)]
pub struct CompleteVersionUploadRequest {
pub files: Vec<CompletedFileUpload>,
pub workspace_id: Option<String>,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CreateVersionUploadRequest {
pub hash: String,
pub file_name: String,
pub size: u64,
pub dst_dir: Option<PathBuf>,
}
#[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,
}