Skip to main content

zai_rs/knowledge/
delete.rs

1use crate::client::http::HttpClient;
2
3/// Knowledge delete request (DELETE /llm-application/open/knowledge/{id})
4pub struct KnowledgeDeleteRequest {
5    /// Bearer API key
6    pub key: String,
7    url: String,
8    _body: (),
9}
10
11impl KnowledgeDeleteRequest {
12    /// Build a delete request with target id
13    pub fn new(key: String, id: impl AsRef<str>) -> Self {
14        let url = format!(
15            "https://open.bigmodel.cn/api/llm-application/open/knowledge/{}",
16            id.as_ref()
17        );
18        Self {
19            key,
20            url,
21            _body: (),
22        }
23    }
24
25    pub fn delete(
26        &self,
27    ) -> impl std::future::Future<Output = crate::ZaiResult<reqwest::Response>> + Send {
28        let url = self.url.clone();
29        let key = self.key.clone();
30        async move {
31            let resp = reqwest::Client::new()
32                .delete(url)
33                .bearer_auth(key)
34                .send()
35                .await?;
36
37            let status = resp.status();
38            if status.is_success() {
39                return Ok(resp);
40            }
41            let text = resp.text().await.unwrap_or_default();
42            #[derive(serde::Deserialize)]
43            struct ErrEnv {
44                error: ErrObj,
45            }
46            #[derive(serde::Deserialize)]
47            struct ErrObj {
48                _code: serde_json::Value,
49                message: String,
50            }
51
52            if let Ok(parsed) = serde_json::from_str::<ErrEnv>(&text) {
53                return Err(crate::client::error::ZaiError::from_api_response(
54                    status.as_u16(),
55                    0,
56                    parsed.error.message,
57                ));
58            }
59
60            Err(crate::client::error::ZaiError::from_api_response(
61                status.as_u16(),
62                0,
63                text,
64            ))
65        }
66    }
67
68    /// Send delete request and parse typed response
69    pub async fn send(&self) -> crate::ZaiResult<KnowledgeDeleteResponse> {
70        let resp = self.delete().await?;
71        let parsed = resp.json::<KnowledgeDeleteResponse>().await?;
72        Ok(parsed)
73    }
74}
75
76impl HttpClient for KnowledgeDeleteRequest {
77    type Body = ();
78    type ApiUrl = String;
79    type ApiKey = String;
80
81    fn api_url(&self) -> &Self::ApiUrl {
82        &self.url
83    }
84    fn api_key(&self) -> &Self::ApiKey {
85        &self.key
86    }
87    fn body(&self) -> &Self::Body {
88        &self._body
89    }
90}
91
92/// Delete response envelope without data
93#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, validator::Validate)]
94pub struct KnowledgeDeleteResponse {
95    #[serde(skip_serializing_if = "Option::is_none")]
96    pub code: Option<i64>,
97    #[serde(skip_serializing_if = "Option::is_none")]
98    pub message: Option<String>,
99    #[serde(skip_serializing_if = "Option::is_none")]
100    pub timestamp: Option<u64>,
101}