Skip to main content

openai_core/resources/
uploads.rs

1//! Upload namespace implementations.
2
3use std::collections::BTreeMap;
4
5use http::Method;
6use serde::{Deserialize, Serialize};
7use serde_json::Value;
8
9use crate::generated::endpoints;
10
11use super::{
12    JsonRequestBuilder, UploadObject, UploadPartsResource, UploadsResource, encode_path_segment,
13};
14
15/// 表示 upload part 对象。
16#[derive(Debug, Clone, Serialize, Deserialize, Default)]
17pub struct UploadPart {
18    /// part ID。
19    pub id: String,
20    /// 创建时间。
21    pub created_at: Option<u64>,
22    /// 对象类型。
23    #[serde(default)]
24    pub object: String,
25    /// 所属 upload ID。
26    pub upload_id: Option<String>,
27    /// 额外字段。
28    #[serde(flatten)]
29    pub extra: BTreeMap<String, Value>,
30}
31
32impl UploadsResource {
33    /// 创建 upload。
34    pub fn create(&self) -> JsonRequestBuilder<UploadObject> {
35        JsonRequestBuilder::new(
36            self.client.clone(),
37            "uploads.create",
38            Method::POST,
39            "/uploads",
40        )
41    }
42
43    /// 取消 upload。
44    pub fn cancel(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadObject> {
45        JsonRequestBuilder::new(
46            self.client.clone(),
47            "uploads.cancel",
48            Method::POST,
49            format!("/uploads/{}/cancel", encode_path_segment(upload_id.into())),
50        )
51    }
52
53    /// 完成 upload。
54    pub fn complete(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadObject> {
55        JsonRequestBuilder::new(
56            self.client.clone(),
57            "uploads.complete",
58            Method::POST,
59            format!(
60                "/uploads/{}/complete",
61                encode_path_segment(upload_id.into())
62            ),
63        )
64    }
65
66    /// 返回 parts 子资源。
67    pub fn parts(&self) -> UploadPartsResource {
68        UploadPartsResource::new(self.client.clone())
69    }
70}
71
72impl UploadPartsResource {
73    /// 创建 upload part。
74    pub fn create(&self, upload_id: impl Into<String>) -> JsonRequestBuilder<UploadPart> {
75        let endpoint = endpoints::uploads::UPLOADS_PARTS_CREATE;
76        JsonRequestBuilder::new(
77            self.client.clone(),
78            endpoint.id,
79            Method::POST,
80            endpoint.render(&[("upload_id", &encode_path_segment(upload_id.into()))]),
81        )
82    }
83}