use serde::{Deserialize, Serialize};
use crate::compress::CompressionMode;
use crate::enums::{GeometryQuality, Orientation, TextureAlignment, TextureQuality};
use crate::error::Result;
use crate::image::ImageInput;
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
#[serde(deny_unknown_fields)]
pub struct ImageToModelRequest {
#[serde(rename = "file")]
pub image: ImageInput,
#[serde(skip_serializing_if = "Option::is_none")]
pub model_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub face_limit: Option<i32>,
#[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 geometry_quality: Option<GeometryQuality>,
#[serde(skip_serializing_if = "Option::is_none")]
pub texture_alignment: Option<TextureAlignment>,
#[serde(skip_serializing_if = "Option::is_none")]
pub auto_size: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub orientation: Option<Orientation>,
#[serde(skip_serializing_if = "Option::is_none")]
pub quad: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub compress: Option<CompressionMode>,
#[serde(skip_serializing_if = "Option::is_none")]
pub generate_parts: Option<bool>,
#[serde(skip_serializing_if = "Option::is_none")]
pub smart_low_poly: Option<bool>,
}
impl ImageToModelRequest {
pub(crate) fn validate(&self) -> Result<()> {
super::validate_p1_params(
self.model_version.as_deref(),
self.quad,
self.smart_low_poly,
self.generate_parts,
self.geometry_quality.as_ref(),
)
}
}