use serde::{Deserialize, Serialize};
#[derive(Serialize)]
pub(crate) struct TextToModelRequest<'a> {
pub(crate) prompt: &'a str,
#[serde(rename = "type")]
pub(crate) type_: &'a str,
}
#[derive(Serialize, Debug)]
pub struct S3Object {
pub bucket: String,
pub key: String,
}
#[derive(Serialize, Debug, Default)]
pub struct FileContent {
#[serde(rename = "type")]
pub type_: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub object: Option<S3Object>,
#[serde(skip_serializing_if = "Option::is_none")]
pub url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub file_token: Option<String>,
}
#[derive(Serialize, Debug)]
pub struct ImageTaskRequest {
#[serde(rename = "type")]
pub type_: &'static str,
pub file: FileContent,
}
#[derive(Deserialize, Debug)]
pub struct TaskResponse {
#[serde(rename = "task_id")]
pub task_id: String,
}
#[derive(Deserialize, Debug)]
pub(crate) struct StsTokenData {
pub(crate) sts_ak: String,
pub(crate) sts_sk: String,
pub(crate) session_token: String,
pub(crate) resource_bucket: String,
pub(crate) resource_uri: String,
}
#[derive(Deserialize, Debug)]
pub(crate) struct StandardUploadData {
pub(crate) image_token: String,
}
#[derive(Debug, Deserialize, PartialEq, Eq, Clone, Copy)]
#[serde(rename_all = "lowercase")]
pub enum TaskState {
Pending,
Running,
Success,
Failure,
}
#[derive(Debug, Deserialize, Clone)]
pub struct ResultFile {
pub url: String,
}
#[derive(Debug, Deserialize, Clone, Default)]
pub struct TaskResult {
#[serde(default)]
pub pbr_model: Option<ResultFile>,
#[serde(default)]
pub glb_model: Option<ResultFile>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct TaskOutput {
pub generated_image: Option<String>,
}
#[derive(Debug, Deserialize, Clone)]
pub struct TaskStatus {
pub task_id: String,
pub status: TaskState,
pub progress: u8,
pub create_time: u64,
pub result: TaskResult,
pub output: Option<TaskOutput>,
}
#[derive(Deserialize, Debug)]
pub struct Balance {
pub balance: f64,
pub frozen: f64,
}
#[derive(Debug, Deserialize)]
pub(crate) struct ApiResponse<T> {
pub(crate) data: T,
}