Skip to main content

threads_rs/types/
search.rs

1use serde::{Deserialize, Serialize};
2
3use super::common::{SearchMode, SearchType};
4
5/// Options for keyword and topic tag search.
6#[derive(Debug, Clone, Default, Serialize, Deserialize)]
7pub struct SearchOptions {
8    /// Result ordering (top or recent).
9    #[serde(default, skip_serializing_if = "Option::is_none")]
10    pub search_type: Option<SearchType>,
11    /// Search mode (keyword or tag).
12    #[serde(default, skip_serializing_if = "Option::is_none")]
13    pub search_mode: Option<SearchMode>,
14    /// Filter by media type: TEXT, IMAGE, or VIDEO.
15    #[serde(default, skip_serializing_if = "Option::is_none")]
16    pub media_type: Option<String>,
17    /// Filter by author username (exact match, without @).
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub author_username: Option<String>,
20    /// Maximum number of results.
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub limit: Option<usize>,
23    /// Unix timestamp (must be >= `MIN_SEARCH_TIMESTAMP`).
24    #[serde(default, skip_serializing_if = "Option::is_none")]
25    pub since: Option<i64>,
26    /// Unix timestamp.
27    #[serde(default, skip_serializing_if = "Option::is_none")]
28    pub until: Option<i64>,
29    /// Cursor for previous page.
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    pub before: Option<String>,
32    /// Cursor for next page.
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub after: Option<String>,
35}