twapi_v2/responses/
entities.rs1use crate::responses::{
2 annotations::Annotations, cashtags::Cashtags, hashtags::Hashtags, mentions::Mentions,
3 urls::Urls,
4};
5use serde::{Deserialize, Serialize};
6
7#[derive(Serialize, Deserialize, Debug, Clone, Default, PartialEq)]
8pub struct Entities {
9 #[serde(skip_serializing_if = "Option::is_none")]
10 pub annotations: Option<Vec<Annotations>>,
11 #[serde(skip_serializing_if = "Option::is_none")]
12 pub cashtags: Option<Vec<Cashtags>>,
13 #[serde(skip_serializing_if = "Option::is_none")]
14 pub hashtags: Option<Vec<Hashtags>>,
15 #[serde(skip_serializing_if = "Option::is_none")]
16 pub mentions: Option<Vec<Mentions>>,
17 #[serde(skip_serializing_if = "Option::is_none")]
18 pub urls: Option<Vec<Urls>>,
19 #[serde(flatten)]
20 pub extra: std::collections::HashMap<String, serde_json::Value>,
21}
22
23impl Entities {
24 pub fn is_empty_extra(&self) -> bool {
25 let res = self.extra.is_empty()
26 && self
27 .annotations
28 .as_ref()
29 .map(|it| it.iter().all(|item| item.is_empty_extra()))
30 .unwrap_or(true)
31 && self
32 .cashtags
33 .as_ref()
34 .map(|it| it.iter().all(|item| item.is_empty_extra()))
35 .unwrap_or(true)
36 && self
37 .hashtags
38 .as_ref()
39 .map(|it| it.iter().all(|item| item.is_empty_extra()))
40 .unwrap_or(true)
41 && self
42 .mentions
43 .as_ref()
44 .map(|it| it.iter().all(|item| item.is_empty_extra()))
45 .unwrap_or(true)
46 && self
47 .urls
48 .as_ref()
49 .map(|it| it.iter().all(|item| item.is_empty_extra()))
50 .unwrap_or(true);
51 if !res {
52 println!("Entities {:?}", self.extra);
53 }
54 res
55 }
56}