swarmhive_api_types/
upload.rs1use std::collections::BTreeMap;
2
3use serde::{Deserialize, Serialize};
4use utoipa::ToSchema;
5use uuid::Uuid;
6
7use crate::platform::Platform;
8use crate::release::ReleaseStatus;
9
10#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
13pub struct PresignFile {
14 pub relative_path: String,
15 pub size: i64,
16 pub expected_sha256: String,
17 pub expected_md5: String,
21 pub platform: Platform,
22 #[serde(default)]
23 pub target: Option<String>,
24 #[serde(default)]
25 pub arch: Option<String>,
26 #[serde(default)]
27 pub abi: Option<String>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
31pub struct PresignRequest {
32 pub files: Vec<PresignFile>,
33}
34
35#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
38pub struct PresignPart {
39 pub object_key: String,
40 pub presigned_url: String,
41 pub headers: BTreeMap<String, String>,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
45pub struct PresignResponse {
46 pub upload_id: Uuid,
47 pub parts: Vec<PresignPart>,
48}
49
50#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
51pub struct CompletePart {
52 pub object_key: String,
53 pub sha256: String,
54 #[serde(default)]
55 pub etag: Option<String>,
56 #[serde(default)]
59 pub signature: Option<String>,
60}
61
62#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
63pub struct CompleteRequest {
64 pub parts: Vec<CompletePart>,
65 #[serde(default)]
67 pub publish: bool,
68}
69
70#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
71pub struct CompleteResponse {
72 pub release_id: Uuid,
73 pub status: ReleaseStatus,
74 pub endpoints: BTreeMap<String, String>,
76}