novel_openai/containers/
container_files.rs1use bytes::Bytes;
2
3use crate::config::Config;
4use crate::error::OpenAIError;
5use crate::spec::containers::{
6 ContainerFileListResource, ContainerFileResource, CreateContainerFileRequest,
7 DeleteContainerFileResponse,
8};
9use crate::{Client, RequestOptions};
10
11pub struct ContainerFiles<'c, C: Config> {
13 client: &'c Client<C>,
14 container_id: String,
15 pub(crate) request_options: RequestOptions,
16}
17
18impl<'c, C: Config> ContainerFiles<'c, C> {
19 pub fn new(client: &'c Client<C>, container_id: &str) -> Self {
20 Self {
21 client,
22 container_id: container_id.to_string(),
23 request_options: RequestOptions::new(),
24 }
25 }
26
27 #[crate::byot(
29 T0 = Clone,
30 R = serde::de::DeserializeOwned,
31 where_clause = "reqwest::multipart::Form: crate::traits::AsyncTryFrom<T0, Error = OpenAIError>",
32 )]
33 pub async fn create(
34 &self,
35 request: CreateContainerFileRequest,
36 ) -> Result<ContainerFileResource, OpenAIError> {
37 self.client
38 .post_form(
39 &format!("/containers/{}/files", self.container_id),
40 request,
41 &self.request_options,
42 )
43 .await
44 }
45
46 #[crate::byot(R = serde::de::DeserializeOwned)]
48 pub async fn list(&self) -> Result<ContainerFileListResource, OpenAIError> {
49 self.client
50 .get(
51 &format!("/containers/{}/files", self.container_id),
52 &self.request_options,
53 )
54 .await
55 }
56
57 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
59 pub async fn retrieve(&self, file_id: &str) -> Result<ContainerFileResource, OpenAIError> {
60 self.client
61 .get(
62 format!("/containers/{}/files/{file_id}", self.container_id).as_str(),
63 &self.request_options,
64 )
65 .await
66 }
67
68 #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
70 pub async fn delete(&self, file_id: &str) -> Result<DeleteContainerFileResponse, OpenAIError> {
71 self.client
72 .delete(
73 format!("/containers/{}/files/{file_id}", self.container_id).as_str(),
74 &self.request_options,
75 )
76 .await
77 }
78
79 pub async fn content(&self, file_id: &str) -> Result<Bytes, OpenAIError> {
81 let (bytes, _headers) = self
82 .client
83 .get_raw(
84 format!("/containers/{}/files/{file_id}/content", self.container_id).as_str(),
85 &self.request_options,
86 )
87 .await?;
88 Ok(bytes)
89 }
90}