use derive_builder::Builder;
use serde::{Deserialize, Serialize};
use crate::error::OpenAIError;
use crate::types::InputSource;
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq, Default)]
pub enum MemoryLimit {
#[default]
#[serde(rename = "1g")]
OneG,
#[serde(rename = "4g")]
FourG,
#[serde(rename = "16g")]
SixteenG,
#[serde(rename = "64g")]
SixtyFourG,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct ContainerResource {
pub id: String,
pub object: String,
pub name: String,
pub created_at: u64,
pub status: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<ContainerExpiresAfter>,
#[serde(skip_serializing_if = "Option::is_none")]
pub last_active_at: Option<u64>,
pub memory_limit: MemoryLimit,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct ContainerExpiresAfter {
pub anchor: ContainerExpiresAfterAnchor,
pub minutes: u32,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
#[serde(rename_all = "snake_case")]
pub enum ContainerExpiresAfterAnchor {
LastActiveAt,
}
#[derive(Debug, Default, Clone, Builder, PartialEq, Serialize)]
#[builder(name = "CreateContainerRequestArgs")]
#[builder(pattern = "mutable")]
#[builder(setter(into, strip_option), default)]
#[builder(derive(Debug))]
#[builder(build_fn(error = "OpenAIError"))]
pub struct CreateContainerRequest {
pub name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_ids: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub expires_after: Option<ContainerExpiresAfter>,
#[serde(skip_serializing_if = "Option::is_none")]
pub memory_limit: Option<MemoryLimit>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct ContainerListResource {
pub object: String,
pub data: Vec<ContainerResource>,
pub first_id: Option<String>,
pub last_id: Option<String>,
pub has_more: bool,
}
#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
pub struct DeleteContainerResponse {
pub id: String,
pub object: String,
pub deleted: bool,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct ContainerFileResource {
pub id: String,
pub object: String,
pub container_id: String,
pub created_at: u64,
pub bytes: u32,
pub path: String,
pub source: String,
}
#[derive(Debug, Default, Clone, PartialEq)]
pub struct CreateContainerFileRequest {
pub file: Option<InputSource>,
pub file_id: Option<String>,
}
#[derive(Debug, Deserialize, Serialize, Clone, PartialEq)]
pub struct ContainerFileListResource {
pub object: String,
pub data: Vec<ContainerFileResource>,
pub first_id: Option<String>,
pub last_id: Option<String>,
pub has_more: bool,
}
#[derive(Debug, Deserialize, Clone, PartialEq, Serialize)]
pub struct DeleteContainerFileResponse {
pub id: String,
pub object: String,
pub deleted: bool,
}