Skip to main content

beeper_desktop_api/client/
messages.rs

1//! Message-related API operations
2
3use crate::models::{ListMessagesOutput, SendMessageInput, SendMessageOutput};
4use crate::error::Result;
5use super::{BeeperClient, handle_response};
6
7impl BeeperClient {
8    /// Lists all messages in a chat
9    ///
10    /// Paginated message list sorted by timestamp.
11    pub async fn list_messages(
12        &self,
13        chat_id: &str,
14        cursor: Option<&str>,
15        direction: Option<&str>,
16    ) -> Result<ListMessagesOutput> {
17        let mut url = format!(
18            "{}/v1/chats/{}/messages",
19            self.get_base_url(),
20            urlencoding::encode(chat_id)
21        );
22
23        if let Some(c) = cursor {
24            url.push_str(&format!("?cursor={}", urlencoding::encode(c)));
25            if direction.is_some() {
26                url.push('&');
27            }
28        } else if direction.is_some() {
29            url.push('?');
30        }
31
32        if let Some(d) = direction {
33            url.push_str(&format!("direction={}", d));
34        }
35
36        let response = self
37            .get_http_client()
38            .get(&url)
39            .header("Authorization", self.get_auth_header())
40            .send()
41            .await
42            .map_err(|e| super::utils::map_request_error(e, self.get_base_url()))?;
43
44        handle_response(response).await
45    }
46
47    /// Sends a message to a chat
48    ///
49    /// Sends a text message to a specific chat. Supports replying to existing messages.
50    /// Returns the sent message ID.
51    pub async fn send_message(&self, chat_id: &str, input: SendMessageInput) -> Result<SendMessageOutput> {
52        let url = format!(
53            "{}/v1/chats/{}/messages",
54            self.get_base_url(),
55            urlencoding::encode(chat_id)
56        );
57
58        let response = self
59            .get_http_client()
60            .post(&url)
61            .header("Authorization", self.get_auth_header())
62            .json(&input)
63            .send()
64            .await
65            .map_err(|e| super::utils::map_request_error(e, self.get_base_url()))?;
66
67        handle_response(response).await
68    }
69}