Skip to main content

xcom_rs/timeline/
models.rs

1use serde::{Deserialize, Serialize};
2
3use crate::tweets::Tweet;
4
5/// The kind of timeline to retrieve
6#[derive(Debug, Clone)]
7pub enum TimelineKind {
8    /// Home timeline (reverse chronological)
9    Home,
10    /// Mentions timeline
11    Mentions,
12    /// Tweets from a specific user handle
13    User { handle: String },
14}
15
16/// Arguments for timeline retrieval
17#[derive(Debug, Clone)]
18pub struct TimelineArgs {
19    pub kind: TimelineKind,
20    pub limit: usize,
21    pub cursor: Option<String>,
22}
23
24/// Pagination information for timeline results
25#[derive(Debug, Clone, Serialize, Deserialize)]
26pub struct TimelinePagination {
27    #[serde(skip_serializing_if = "Option::is_none")]
28    pub next_token: Option<String>,
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub previous_token: Option<String>,
31}
32
33/// Metadata returned with timeline results
34#[derive(Debug, Clone, Serialize, Deserialize)]
35pub struct TimelineMeta {
36    pub pagination: TimelinePagination,
37}
38
39/// Result of a timeline retrieval
40#[derive(Debug, Clone, Serialize, Deserialize)]
41pub struct TimelineResult {
42    pub tweets: Vec<Tweet>,
43    #[serde(skip_serializing_if = "Option::is_none")]
44    pub meta: Option<TimelineMeta>,
45}