twapi_v2/responses/
media.rs1use crate::responses::{
2 media_non_public_metrics::MediaNonPublicMetrics, media_organic_metrics::MediaOrganicMetrics,
3 media_promoted_metrics::MediaPromotedMetrics, media_public_metrics::MediaPublicMetrics,
4 variants::Variants,
5};
6use serde::{Deserialize, Serialize};
7
8#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
9pub struct Media {
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub duration_ms: Option<i64>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub height: Option<i64>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub media_key: Option<String>,
16 #[serde(skip_serializing_if = "Option::is_none")]
17 pub alt_text: Option<String>,
18 #[serde(skip_serializing_if = "Option::is_none")]
19 pub preview_image_url: Option<String>,
20 #[serde(skip_serializing_if = "Option::is_none")]
21 pub non_public_metrics: Option<MediaNonPublicMetrics>,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub organic_metrics: Option<MediaOrganicMetrics>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub promoted_metrics: Option<MediaPromotedMetrics>,
26 #[serde(skip_serializing_if = "Option::is_none")]
27 pub public_metrics: Option<MediaPublicMetrics>,
28 #[serde(skip_serializing_if = "Option::is_none")]
29 pub r#type: Option<String>,
30 #[serde(skip_serializing_if = "Option::is_none")]
31 pub variants: Option<Vec<Variants>>,
32 #[serde(skip_serializing_if = "Option::is_none")]
33 pub url: Option<String>,
34 #[serde(skip_serializing_if = "Option::is_none")]
35 pub width: Option<i64>,
36 #[serde(flatten)]
37 pub extra: std::collections::HashMap<String, serde_json::Value>,
38}
39
40impl Media {
41 pub fn is_empty_extra(&self) -> bool {
42 let res = self.extra.is_empty()
43 && self
44 .non_public_metrics
45 .as_ref()
46 .map(|it| it.is_empty_extra())
47 .unwrap_or(true)
48 && self
49 .organic_metrics
50 .as_ref()
51 .map(|it| it.is_empty_extra())
52 .unwrap_or(true)
53 && self
54 .promoted_metrics
55 .as_ref()
56 .map(|it| it.is_empty_extra())
57 .unwrap_or(true)
58 && self
59 .public_metrics
60 .as_ref()
61 .map(|it| it.is_empty_extra())
62 .unwrap_or(true)
63 && self
64 .variants
65 .as_ref()
66 .map(|it| it.iter().all(|item| item.is_empty_extra()))
67 .unwrap_or(true);
68 if !res {
69 println!("Media {:?}", self.extra);
70 }
71 res
72 }
73}