use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use uuid::Uuid;
use crate::platform::Platform;
use crate::release::ReleaseStatus;
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PresignFile {
pub relative_path: String,
pub size: i64,
pub expected_sha256: String,
pub expected_md5: String,
pub platform: Platform,
#[serde(default)]
pub target: Option<String>,
#[serde(default)]
pub arch: Option<String>,
#[serde(default)]
pub abi: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PresignRequest {
pub files: Vec<PresignFile>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PresignPart {
pub object_key: String,
pub presigned_url: String,
pub headers: BTreeMap<String, String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct PresignResponse {
pub upload_id: Uuid,
pub parts: Vec<PresignPart>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CompletePart {
pub object_key: String,
pub sha256: String,
#[serde(default)]
pub etag: Option<String>,
#[serde(default)]
pub signature: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CompleteRequest {
pub parts: Vec<CompletePart>,
#[serde(default)]
pub publish: bool,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct CompleteResponse {
pub release_id: Uuid,
pub status: ReleaseStatus,
pub endpoints: BTreeMap<String, String>,
}