threads_rs/api/
posts_delete.rs1use crate::client::Client;
2use crate::constants;
3use crate::error;
4use crate::types::PostId;
5
6#[derive(Debug, serde::Deserialize)]
8struct DeleteResponse {
9 #[serde(default)]
11 success: Option<bool>,
12 #[serde(default)]
14 deleted_id: Option<String>,
15}
16
17impl Client {
18 pub async fn delete_post(&self, post_id: &PostId) -> crate::Result<String> {
20 if !post_id.is_valid() {
21 return Err(error::new_validation_error(
22 0,
23 constants::ERR_EMPTY_POST_ID,
24 "",
25 "post_id",
26 ));
27 }
28
29 let token = self.access_token().await;
30 let path = format!("/{}", post_id);
31 let resp = self.http_client.delete(&path, &token).await?;
32
33 if let Ok(del_resp) = serde_json::from_slice::<DeleteResponse>(&resp.body) {
34 if del_resp.success == Some(false) {
35 return Err(error::new_api_error(
36 0,
37 "Delete request returned success=false",
38 "",
39 "",
40 ));
41 }
42 if let Some(id) = del_resp.deleted_id {
43 return Ok(id);
44 }
45 }
46
47 Ok(post_id.to_string())
48 }
49}