Skip to main content

poly_x_tracker/model/
mod.rs

1pub(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}