async_openai/
containers.rs

1use serde::Serialize;
2
3use crate::{
4    config::Config,
5    container_files::ContainerFiles,
6    error::OpenAIError,
7    types::{
8        ContainerListResource, ContainerResource, CreateContainerRequest, DeleteContainerResponse,
9    },
10    Client,
11};
12
13pub struct Containers<'c, C: Config> {
14    client: &'c Client<C>,
15}
16
17impl<'c, C: Config> Containers<'c, C> {
18    pub fn new(client: &'c Client<C>) -> Self {
19        Self { client }
20    }
21
22    /// [ContainerFiles] API group
23    pub fn files(&self, container_id: &str) -> ContainerFiles<'_, C> {
24        ContainerFiles::new(self.client, container_id)
25    }
26
27    /// Create a container.
28    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
29    pub async fn create(
30        &self,
31        request: CreateContainerRequest,
32    ) -> Result<ContainerResource, OpenAIError> {
33        self.client.post("/containers", request).await
34    }
35
36    /// List containers.
37    #[crate::byot(T0 = serde::Serialize, R = serde::de::DeserializeOwned)]
38    pub async fn list<Q>(&self, query: &Q) -> Result<ContainerListResource, OpenAIError>
39    where
40        Q: Serialize + ?Sized,
41    {
42        self.client.get_with_query("/containers", &query).await
43    }
44
45    /// Retrieve a container.
46    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
47    pub async fn retrieve(&self, container_id: &str) -> Result<ContainerResource, OpenAIError> {
48        self.client
49            .get(format!("/containers/{container_id}").as_str())
50            .await
51    }
52
53    /// Delete a container.
54    #[crate::byot(T0 = std::fmt::Display, R = serde::de::DeserializeOwned)]
55    pub async fn delete(&self, container_id: &str) -> Result<DeleteContainerResponse, OpenAIError> {
56        self.client
57            .delete(format!("/containers/{container_id}").as_str())
58            .await
59    }
60}