openai_interface/rest/
delete.rs1use std::str::FromStr;
4
5use serde::de::DeserializeOwned;
6
7use crate::errors::OapiError;
8
9pub trait Delete {
10 fn build_url(&self, base_url: &str) -> Result<String, OapiError>;
15}
16
17pub trait DeleteNoStream: Delete + Send + Sync {
18 type Response: DeserializeOwned + FromStr<Err = OapiError> + Send + Sync;
19
20 fn get_response_string(
21 &self,
22 base_url: &str,
23 key: &str,
24 ) -> impl Future<Output = Result<String, OapiError>> + Send + Sync {
25 async move {
26 let url = self.build_url(base_url)?;
27
28 let client = reqwest::Client::new();
29 let response = client
30 .delete(url)
31 .header("Accept", "application/json")
32 .bearer_auth(key)
33 .send()
34 .await
35 .map_err(|e| {
36 OapiError::SendError(format!("Failed to send DELETE request: {}", e))
37 })?;
38
39 if response.status() != reqwest::StatusCode::OK {
40 return Err(
41 crate::errors::OapiError::ResponseStatus(response.status().as_u16()).into(),
42 );
43 }
44
45 let text = response.text().await.map_err(|e| {
46 OapiError::ResponseError(format!("Failed to get response text: {:#?}", e))
47 })?;
48
49 Ok(text)
50 }
51 }
52
53 fn get_response(
54 &self,
55 base_url: &str,
56 key: &str,
57 ) -> impl Future<Output = Result<Self::Response, OapiError>> + Send + Sync {
58 async move {
59 let text = self.get_response_string(base_url, key).await?;
60 let result = Self::Response::from_str(&text)?;
61 Ok(result)
62 }
63 }
64}