zai_rs/knowledge/
delete.rs1use crate::client::http::HttpClient;
2
3pub struct KnowledgeDeleteRequest {
5 pub key: String,
7 url: String,
8 _body: (),
9}
10
11impl KnowledgeDeleteRequest {
12 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 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#[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}