Skip to main content

openai_interface/uploads/
cancel.rs

1//! Cancel an upload via `POST /uploads/{upload_id}/cancel`.
2//!
3//! > ![warn] This module is untested!
4//! > If you encounter any issues, please report them on the repository.
5//!
6//! Cancelling discards all uploaded parts; the returned [`Upload`]
7//! carries the `cancelled` status.
8
9use url::Url;
10
11use crate::{
12    errors::OapiError,
13    rest::post::{Post, PostNoStream},
14    uploads::Upload,
15};
16
17/// Cancels an in-progress upload session.
18#[derive(Debug, Clone, serde::Serialize)]
19pub struct CancelUploadRequest<'a> {
20    /// The ID of the upload session to cancel, e.g. `upload_...`.
21    #[serde(skip)]
22    pub upload_id: &'a str,
23}
24
25impl Post for CancelUploadRequest<'_> {
26    fn is_streaming(&self) -> bool {
27        false
28    }
29
30    /// Builds the URL for the request.
31    ///
32    /// `base_url` should be like <https://api.openai.com/v1>
33    fn build_url(&self, base_url: &str) -> Result<String, OapiError> {
34        let mut url = Url::parse(base_url.trim_end_matches('/')).map_err(OapiError::UrlError)?;
35        url.path_segments_mut()
36            .map_err(|_| OapiError::UrlCannotBeBase(base_url.to_string()))?
37            .push("uploads")
38            .push(self.upload_id)
39            .push("cancel");
40        Ok(url.to_string())
41    }
42}
43
44impl PostNoStream for CancelUploadRequest<'_> {
45    type Response = Upload;
46}