Skip to main content

threads_rs/types/
pagination.rs

1use serde::{Deserialize, Serialize};
2
3use super::common::ApprovalStatus;
4
5/// Pagination information for navigating result sets.
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct Paging {
8    /// Cursor-based pagination cursors.
9    #[serde(default, skip_serializing_if = "Option::is_none")]
10    pub cursors: Option<PagingCursors>,
11    /// Deprecated: use `cursors.before`.
12    #[serde(default, skip_serializing_if = "Option::is_none")]
13    pub before: Option<String>,
14    /// Deprecated: use `cursors.after`.
15    #[serde(default, skip_serializing_if = "Option::is_none")]
16    pub after: Option<String>,
17}
18
19/// Cursor-based pagination cursors.
20#[derive(Debug, Clone, Default, Serialize, Deserialize)]
21pub struct PagingCursors {
22    /// Cursor pointing to the start of the page.
23    #[serde(default, skip_serializing_if = "Option::is_none")]
24    pub before: Option<String>,
25    /// Cursor pointing to the end of the page.
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub after: Option<String>,
28}
29
30/// Standard pagination parameters.
31#[derive(Debug, Clone, Default, Serialize, Deserialize)]
32pub struct PaginationOptions {
33    /// Maximum number of results.
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub limit: Option<usize>,
36    /// Cursor for previous page.
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub before: Option<String>,
39    /// Cursor for next page.
40    #[serde(default, skip_serializing_if = "Option::is_none")]
41    pub after: Option<String>,
42}
43
44/// Options for posts requests with time filtering.
45#[derive(Debug, Clone, Default, Serialize, Deserialize)]
46pub struct PostsOptions {
47    /// Maximum number of results.
48    #[serde(default, skip_serializing_if = "Option::is_none")]
49    pub limit: Option<usize>,
50    /// Cursor for previous page.
51    #[serde(default, skip_serializing_if = "Option::is_none")]
52    pub before: Option<String>,
53    /// Cursor for next page.
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub after: Option<String>,
56    /// Unix timestamp.
57    #[serde(default, skip_serializing_if = "Option::is_none")]
58    pub since: Option<i64>,
59    /// Unix timestamp.
60    #[serde(default, skip_serializing_if = "Option::is_none")]
61    pub until: Option<i64>,
62}
63
64/// Options for replies and conversation requests.
65#[derive(Debug, Clone, Default, Serialize, Deserialize)]
66pub struct RepliesOptions {
67    /// Maximum number of results.
68    #[serde(default, skip_serializing_if = "Option::is_none")]
69    pub limit: Option<usize>,
70    /// Cursor for previous page.
71    #[serde(default, skip_serializing_if = "Option::is_none")]
72    pub before: Option<String>,
73    /// Cursor for next page.
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub after: Option<String>,
76    /// `true` for reverse chronological, `false` for chronological (default: `true`).
77    #[serde(default, skip_serializing_if = "Option::is_none")]
78    pub reverse: Option<bool>,
79}
80
81/// Options for retrieving pending replies.
82#[derive(Debug, Clone, Default, Serialize, Deserialize)]
83pub struct PendingRepliesOptions {
84    /// Maximum number of results.
85    #[serde(default, skip_serializing_if = "Option::is_none")]
86    pub limit: Option<usize>,
87    /// Cursor for previous page.
88    #[serde(default, skip_serializing_if = "Option::is_none")]
89    pub before: Option<String>,
90    /// Cursor for next page.
91    #[serde(default, skip_serializing_if = "Option::is_none")]
92    pub after: Option<String>,
93    /// `true` for reverse chronological, `false` for chronological.
94    #[serde(default, skip_serializing_if = "Option::is_none")]
95    pub reverse: Option<bool>,
96    /// Filter by approval status: `Pending` or `Ignored`.
97    #[serde(default, skip_serializing_if = "Option::is_none")]
98    pub approval_status: Option<ApprovalStatus>,
99}