Skip to main content

twapi_v2/responses/
media.rs

1use 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}