Skip to main content

beeper_desktop_api/client/
search.rs

1//! Search-related API operations
2
3use crate::models::{SearchChatsOutput, SearchMessagesOutput};
4use crate::error::Result;
5use super::{BeeperClient, handle_response};
6
7impl BeeperClient {
8    /// Searches messages across chats
9    ///
10    /// Uses Beeper's message index for full-text search.
11    pub async fn search_messages(
12        &self,
13        query: &str,
14        cursor: Option<&str>,
15        direction: Option<&str>,
16    ) -> Result<SearchMessagesOutput> {
17        let mut url = format!("{}/v1/messages/search?q={}", self.get_base_url(), urlencoding::encode(query));
18
19        if let Some(c) = cursor {
20            url.push_str(&format!("&cursor={}", urlencoding::encode(c)));
21        }
22
23        if let Some(d) = direction {
24            url.push_str(&format!("&direction={}", d));
25        }
26
27        let response = self
28            .get_http_client()
29            .get(&url)
30            .header("Authorization", self.get_auth_header())
31            .send()
32            .await
33            .map_err(|e| super::utils::map_request_error(e, self.get_base_url()))?;
34
35        handle_response(response).await
36    }
37
38    /// Searches chats by title, network, or participants
39    ///
40    /// Uses Beeper Desktop's renderer algorithm.
41    pub async fn search_chats(
42        &self,
43        query: &str,
44        cursor: Option<&str>,
45        direction: Option<&str>,
46    ) -> Result<SearchChatsOutput> {
47        let mut url = format!("{}/v1/chats/search?q={}", self.get_base_url(), urlencoding::encode(query));
48
49        if let Some(c) = cursor {
50            url.push_str(&format!("&cursor={}", urlencoding::encode(c)));
51        }
52
53        if let Some(d) = direction {
54            url.push_str(&format!("&direction={}", d));
55        }
56
57        let response = self
58            .get_http_client()
59            .get(&url)
60            .header("Authorization", self.get_auth_header())
61            .send()
62            .await
63            .map_err(|e| super::utils::map_request_error(e, self.get_base_url()))?;
64
65        handle_response(response).await
66    }
67}