twitter_v2/data/
entity.rs

1#[cfg(feature = "arbitrary_precision")]
2use serde_json::Number;
3
4use crate::id::NumericId;
5use serde::{Deserialize, Serialize};
6use url::Url;
7
8#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
9pub struct UrlImage {
10    pub url: Url,
11    pub width: usize,
12    pub height: usize,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
16pub struct UrlEntity {
17    pub start: usize,
18    pub end: usize,
19    pub url: String,
20    pub expanded_url: String,
21    pub display_url: String,
22    #[serde(skip_serializing_if = "Option::is_none")]
23    pub images: Option<Vec<UrlImage>>,
24    #[serde(skip_serializing_if = "Option::is_none")]
25    pub status: Option<usize>,
26    #[serde(skip_serializing_if = "Option::is_none")]
27    pub title: Option<String>,
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub description: Option<String>,
30    #[serde(skip_serializing_if = "Option::is_none")]
31    pub unwound_url: Option<String>,
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
35pub struct HashtagEntity {
36    pub start: usize,
37    pub end: usize,
38    pub tag: String,
39}
40
41#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
42#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
43pub struct AnnotationEntity {
44    pub start: isize,
45    pub end: isize,
46    #[cfg(feature = "arbitrary_precision")]
47    pub probability: Number,
48    #[cfg(not(feature = "arbitrary_precision"))]
49    pub probability: f64,
50    #[serde(rename = "type")]
51    pub kind: String,
52    pub normalized_text: String,
53}
54
55#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
56pub struct CashtagEntity {
57    pub start: usize,
58    pub end: usize,
59    pub tag: String,
60}
61
62#[derive(Clone, Debug, Serialize, Deserialize, Eq, PartialEq)]
63pub struct MentionEntity {
64    pub start: usize,
65    pub end: usize,
66    pub username: String,
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub id: Option<NumericId>,
69}
70
71#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
72#[cfg_attr(feature = "arbitrary_precision", derive(Eq))]
73pub struct FullTextEntities {
74    #[serde(skip_serializing_if = "Option::is_none")]
75    pub urls: Option<Vec<UrlEntity>>,
76    #[serde(skip_serializing_if = "Option::is_none")]
77    pub hashtags: Option<Vec<HashtagEntity>>,
78    #[serde(skip_serializing_if = "Option::is_none")]
79    pub annotations: Option<Vec<AnnotationEntity>>,
80    #[serde(skip_serializing_if = "Option::is_none")]
81    pub cashtags: Option<Vec<CashtagEntity>>,
82    #[serde(skip_serializing_if = "Option::is_none")]
83    pub mentions: Option<Vec<MentionEntity>>,
84}