tripo_api/tasks/
text_to_model.rs1use serde::{Deserialize, Serialize};
4
5use crate::compress::CompressionMode;
6use crate::enums::{GeometryQuality, TextureQuality};
7use crate::error::Result;
8
9#[derive(Debug, Clone, Serialize, Deserialize, Default)]
13#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
14#[serde(deny_unknown_fields)]
15pub struct TextToModelRequest {
16 pub prompt: String,
18 #[serde(skip_serializing_if = "Option::is_none")]
20 pub negative_prompt: Option<String>,
21 #[serde(skip_serializing_if = "Option::is_none")]
23 pub model_version: Option<String>,
24 #[serde(skip_serializing_if = "Option::is_none")]
26 pub face_limit: Option<i32>,
27 #[serde(skip_serializing_if = "Option::is_none")]
29 pub texture: Option<bool>,
30 #[serde(skip_serializing_if = "Option::is_none")]
32 pub pbr: Option<bool>,
33 #[serde(skip_serializing_if = "Option::is_none")]
35 pub image_seed: Option<i32>,
36 #[serde(skip_serializing_if = "Option::is_none")]
38 pub model_seed: Option<i32>,
39 #[serde(skip_serializing_if = "Option::is_none")]
41 pub texture_seed: Option<i32>,
42 #[serde(skip_serializing_if = "Option::is_none")]
44 pub texture_quality: Option<TextureQuality>,
45 #[serde(skip_serializing_if = "Option::is_none")]
47 pub geometry_quality: Option<GeometryQuality>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 pub auto_size: Option<bool>,
51 #[serde(skip_serializing_if = "Option::is_none")]
53 pub quad: Option<bool>,
54 #[serde(skip_serializing_if = "Option::is_none")]
56 pub compress: Option<CompressionMode>,
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub generate_parts: Option<bool>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub smart_low_poly: Option<bool>,
63}
64
65impl TextToModelRequest {
66 pub(crate) fn validate(&self) -> Result<()> {
67 super::validate_p1_params(
68 self.model_version.as_deref(),
69 self.quad,
70 self.smart_low_poly,
71 self.generate_parts,
72 self.geometry_quality.as_ref(),
73 )
74 }
75}