1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct UserMedia {
#[serde(skip_serializing_if = "Option::is_none")]
pub uuid: Option<uuid::Uuid>,
pub filename: String,
pub size: u32,
#[serde(skip_serializing_if = "Option::is_none")]
pub datetime_created: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expiry: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub status: Option<Status>,
}
impl UserMedia {
#[must_use]
pub fn new(filename: String, size: u32) -> UserMedia {
UserMedia {
uuid: None,
filename,
size,
datetime_created: None,
expiry: None,
status: None,
}
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
pub enum Status {
#[serde(rename = "initial")]
Initial,
#[serde(rename = "upload_created")]
UploadCreated,
#[serde(rename = "upload_error")]
UploadError,
#[serde(rename = "upload_complete")]
UploadComplete,
#[serde(rename = "upload_aborted")]
UploadAborted,
}
impl Default for Status {
fn default() -> Status {
Self::Initial
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct InitiateUploadParams {
pub filename: String,
pub file_size_bytes: u32,
}
impl InitiateUploadParams {
#[must_use]
pub fn new(filename: String, file_size_bytes: u32) -> InitiateUploadParams {
InitiateUploadParams {
filename,
file_size_bytes,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct InitiateUploadResponse {
pub user_media: UserMedia,
pub upload_urls: Vec<UploadPartUrl>,
}
impl InitiateUploadResponse {
#[must_use]
pub fn new(user_media: UserMedia, upload_urls: Vec<UploadPartUrl>) -> InitiateUploadResponse {
InitiateUploadResponse {
user_media,
upload_urls,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct FinishUploadParams {
pub parts: Vec<CompletedPart>,
}
impl FinishUploadParams {
#[must_use]
pub fn new(parts: Vec<CompletedPart>) -> FinishUploadParams {
FinishUploadParams { parts }
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct UploadPartUrl {
pub part_number: i32,
pub url: String,
pub offset: i32,
pub length: i32,
}
impl UploadPartUrl {
#[must_use]
pub fn new(part_number: i32, url: String, offset: i32, length: i32) -> UploadPartUrl {
UploadPartUrl {
part_number,
url,
offset,
length,
}
}
}
#[derive(Clone, Debug, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct CompletedPart {
#[serde(rename = "ETag")]
pub e_tag: String,
#[serde(rename = "PartNumber")]
pub part_number: i32,
}
impl CompletedPart {
#[must_use]
pub fn new(e_tag: String, part_number: i32) -> CompletedPart {
CompletedPart { e_tag, part_number }
}
}