use serde::{Deserialize, Serialize};
use crate::compress::CompressionMode;
use crate::enums::{TextureAlignment, TextureQuality};
use crate::image::ImageInput;
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(deny_unknown_fields, default)]
pub struct TexturePrompt {
#[serde(skip_serializing_if = "Option::is_none")]
pub text: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub image: Option<ImageInput>,
#[serde(skip_serializing_if = "Option::is_none")]
pub style_image: Option<ImageInput>,
}
impl TexturePrompt {
pub(crate) fn is_empty(&self) -> bool {
self.text.is_none() && self.image.is_none() && self.style_image.is_none()
}
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(deny_unknown_fields)]
pub struct TextureModelRequest {
pub original_model_task_id: String,
#[serde(default, skip_serializing_if = "TexturePrompt::is_empty")]
pub texture_prompt: TexturePrompt,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub texture: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub pbr: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_seed: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub texture_seed: Option<i32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub texture_quality: Option<TextureQuality>,
#[serde(skip_serializing_if = "Option::is_none")]
pub texture_alignment: Option<TextureAlignment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub part_names: Option<Vec<String>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compress: Option<CompressionMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub bake: Option<bool>,
}