poly_x_tracker/model/
mod.rs1pub(crate) mod metrics;
2pub(crate) mod posts;
3pub(crate) mod trackings;
4pub(crate) mod users;
5
6pub use self::metrics::{Metric, MetricData};
7pub use self::posts::{Post, PostMetrics};
8pub use self::trackings::{Tracking, TrackingStats, TrackingStatsDaily, TrackingUser};
9pub use self::users::{User, UserCount, UserTrackings};
10
11use crate::client::XTrackerError;
12use serde::{Deserialize, Serialize};
13
14#[derive(Debug, Clone, Serialize, Deserialize)]
15pub(crate) struct BaseResponse<T> {
16 data: Option<T>,
17 error: Option<String>,
18}
19
20impl<T> BaseResponse<T> {
21 pub fn into_result(self) -> Result<T, XTrackerError> {
22 match (self.data, self.error) {
23 (Some(data), _) => Ok(data),
24 (None, Some(error)) => Err(XTrackerError::Server(error)),
25 (None, None) => Err(XTrackerError::Server("".into())),
26 }
27 }
28}
29
30#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
31pub enum Platform {
32 #[serde(rename = "X")]
33 X,
34 #[serde(rename = "TRUTH_SOCIAL")]
35 TruthSocial,
36}
37
38impl std::fmt::Display for Platform {
39 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
40 let json = serde_json::to_string(self).map_err(|_| std::fmt::Error)?;
41 f.write_str(json.trim_matches('"'))
42 }
43}