openai_core/resources/
uploads.rs1use 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#[derive(Debug, Clone, Serialize, Deserialize, Default)]
17pub struct UploadPart {
18 pub id: String,
20 pub created_at: Option<u64>,
22 #[serde(default)]
24 pub object: String,
25 pub upload_id: Option<String>,
27 #[serde(flatten)]
29 pub extra: BTreeMap<String, Value>,
30}
31
32impl UploadsResource {
33 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 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 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 pub fn parts(&self) -> UploadPartsResource {
68 UploadPartsResource::new(self.client.clone())
69 }
70}
71
72impl UploadPartsResource {
73 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}