Skip to main content

twapi_v2/responses/
media.rs

1use crate::responses::{media_public_metrics::MediaPublicMetrics, variants::Variants};
2use serde::{Deserialize, Serialize};
3
4#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
5pub struct Media {
6    #[serde(skip_serializing_if = "Option::is_none")]
7    pub duration_ms: Option<i64>,
8    #[serde(skip_serializing_if = "Option::is_none")]
9    pub height: Option<i64>,
10    #[serde(skip_serializing_if = "Option::is_none")]
11    pub media_key: Option<String>,
12    #[serde(skip_serializing_if = "Option::is_none")]
13    pub alt_text: Option<String>,
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub preview_image_url: Option<String>,
16    #[serde(skip_serializing_if = "Option::is_none")]
17    pub public_metrics: Option<MediaPublicMetrics>,
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub r#type: Option<String>,
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub variants: Option<Vec<Variants>>,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub url: Option<String>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub width: Option<i64>,
26    #[serde(flatten)]
27    pub extra: std::collections::HashMap<String, serde_json::Value>,
28}
29
30impl Media {
31    pub fn is_empty_extra(&self) -> bool {
32        let res = self.extra.is_empty()
33            && self
34                .public_metrics
35                .as_ref()
36                .map(|it| it.is_empty_extra())
37                .unwrap_or(true)
38            && self
39                .variants
40                .as_ref()
41                .map(|it| it.iter().all(|item| item.is_empty_extra()))
42                .unwrap_or(true);
43        if !res {
44            println!("Media {:?}", self.extra);
45        }
46        res
47    }
48}