drive_v3/objects/
media.rs1use std::fmt;
2use serde::{Serialize, Deserialize};
3
4#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
10pub enum UploadType {
11 #[default]
18 Media,
19
20 Multipart,
25
26 Resumable,
32}
33
34impl fmt::Display for UploadType {
35 fn fmt( &self, f: &mut fmt::Formatter<'_> ) -> fmt::Result {
36 let string = match self {
37 Self::Media => "media",
38 Self::Multipart => "multipart",
39 Self::Resumable => "resumable",
40 };
41
42 write!(f, "{}", string)
43 }
44}
45
46#[derive(Default, Debug, Clone, Serialize, Deserialize)]
48#[serde(rename_all = "camelCase")]
49pub struct Location {
50 #[serde(skip_serializing_if = "Option::is_none")]
52 pub latitude: Option<f64>,
53
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub longitude: Option<f64>,
57
58 #[serde(skip_serializing_if = "Option::is_none")]
60 pub altitude: Option<f64>,
61}
62
63impl fmt::Display for Location {
64 fn fmt( &self, f: &mut fmt::Formatter<'_> ) -> fmt::Result {
65 let json = serde_json::to_string_pretty(&self)
66 .unwrap_or( format!("unable to parse JSON, this is the debug view:\n{:#?}", self) );
67
68 write!(f, "{}", json)
69 }
70}
71
72impl Location {
73 pub fn new() -> Self {
75 Self { ..Default::default() }
76 }
77}
78
79#[derive(Default, Debug, Clone, Serialize, Deserialize)]
81#[serde(rename_all = "camelCase")]
82pub struct ImageMediaMetadata {
83 #[serde(skip_serializing_if = "Option::is_none")]
85 pub flash_used: Option<bool>,
86
87 #[serde(skip_serializing_if = "Option::is_none")]
89 pub metering_mode: Option<String>,
90
91 #[serde(skip_serializing_if = "Option::is_none")]
93 pub sensor: Option<String>,
94
95 #[serde(skip_serializing_if = "Option::is_none")]
97 pub exposure_mode: Option<String>,
98
99 #[serde(skip_serializing_if = "Option::is_none")]
101 pub color_space: Option<String>,
102
103 #[serde(skip_serializing_if = "Option::is_none")]
105 pub white_balance: Option<String>,
106
107 #[serde(skip_serializing_if = "Option::is_none")]
109 pub width: Option<i64>,
110
111 #[serde(skip_serializing_if = "Option::is_none")]
113 pub height: Option<i64>,
114
115 #[serde(skip_serializing_if = "Option::is_none")]
117 pub location: Option<Location>,
118
119 #[serde(skip_serializing_if = "Option::is_none")]
121 pub rotation: Option<i64>,
122
123 #[serde(skip_serializing_if = "Option::is_none")]
125 pub time: Option<String>,
126
127 #[serde(skip_serializing_if = "Option::is_none")]
129 pub camera_make: Option<String>,
130
131 #[serde(skip_serializing_if = "Option::is_none")]
133 pub camera_model: Option<String>,
134
135 #[serde(skip_serializing_if = "Option::is_none")]
137 pub exposure_time: Option<f64>,
138
139 #[serde(skip_serializing_if = "Option::is_none")]
141 pub aperture: Option<f64>,
142
143 #[serde(skip_serializing_if = "Option::is_none")]
145 pub focal_length: Option<f64>,
146
147 #[serde(skip_serializing_if = "Option::is_none")]
149 pub iso_speed: Option<i64>,
150
151 #[serde(skip_serializing_if = "Option::is_none")]
153 pub exposure_bias: Option<f64>,
154
155 #[serde(skip_serializing_if = "Option::is_none")]
157 pub max_aperture_value: Option<f64>,
158
159 #[serde(skip_serializing_if = "Option::is_none")]
161 pub subject_distance: Option<i64>,
162
163 #[serde(skip_serializing_if = "Option::is_none")]
165 pub lens: Option<String>,
166}
167
168impl fmt::Display for ImageMediaMetadata {
169 fn fmt( &self, f: &mut fmt::Formatter<'_> ) -> fmt::Result {
170 let json = serde_json::to_string_pretty(&self)
171 .unwrap_or( format!("unable to parse JSON, this is the debug view:\n{:#?}", self) );
172
173 write!(f, "{}", json)
174 }
175}
176
177impl ImageMediaMetadata {
178 pub fn new() -> Self {
180 Self { ..Default::default() }
181 }
182}
183
184#[derive(Default, Debug, Clone, Serialize, Deserialize)]
188#[serde(rename_all = "camelCase")]
189pub struct VideoMediaMetadata {
190 #[serde(skip_serializing_if = "Option::is_none")]
192 pub width: Option<i64>,
193
194 #[serde(skip_serializing_if = "Option::is_none")]
196 pub height: Option<i64>,
197
198 #[serde(skip_serializing_if = "Option::is_none")]
200 pub duration_millis: Option<String>,
201}
202
203impl fmt::Display for VideoMediaMetadata {
204 fn fmt( &self, f: &mut fmt::Formatter<'_> ) -> fmt::Result {
205 let json = serde_json::to_string_pretty(&self)
206 .unwrap_or( format!("unable to parse JSON, this is the debug view:\n{:#?}", self) );
207
208 write!(f, "{}", json)
209 }
210}
211
212impl VideoMediaMetadata {
213 pub fn new() -> Self {
215 Self { ..Default::default() }
216 }
217}