Skip to main content

hinge_rs/client/
chat.rs

1use super::HingeClient;
2use crate::errors::HingeError;
3use crate::models::SendMessagePayload;
4use crate::storage::Storage;
5use uuid::Uuid;
6
7impl<S: Storage + Clone> HingeClient<S> {
8    pub async fn send_message(
9        &self,
10        mut payload: SendMessagePayload,
11    ) -> Result<serde_json::Value, HingeError> {
12        let mut cloned = self.clone();
13        let self_user_id = cloned
14            .hinge_auth
15            .as_ref()
16            .ok_or_else(|| HingeError::Auth("hinge token missing".into()))?
17            .identity_id
18            .clone();
19        let _channel_url = cloned
20            .sendbird_get_or_create_dm_channel(&self_user_id, &payload.subject_id)
21            .await
22            .unwrap_or_else(|e| {
23                log::warn!("sendbird get-or-create failed before send: {}", e);
24                String::new()
25            });
26
27        if payload.dedup_id.is_none() {
28            payload.dedup_id = Some(Uuid::new_v4().to_string().to_uppercase());
29        }
30
31        let url = format!("{}/message/send", self.settings.base_url);
32        let body = serde_json::to_value(&payload).map_err(|e| HingeError::Serde(e.to_string()))?;
33        let res = self.http_post(&url, &body).await?;
34        self.parse_response(res).await
35    }
36}