收敛Tripo三入口重复的extra字段构造
- 新增 common/extra.rs 统一构造 texture_version 与 delight 的 SDK extra 字段,键名只留一份 - text_to_model 与 image_to_model 删除各自的 extra_fields 副本,改调公共实现 - multiview_to_model 的内联 extra.insert 也改为复用同一构造 - 未提供的参数仍不写入 extra,请求体行为与原先一致
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
//! provider 请求的 SDK `extra` 字段构造。
|
||||
//!
|
||||
//! `texture_version` 与 `delight` 不在 SDK params 的具名参数里,只能按 SDK 期望的
|
||||
//! 键名透传。键名一旦在某个入口写错,请求体就会静默丢字段,所以三个生成入口共用
|
||||
//! 同一份构造逻辑,不在各 endpoint 里各写一遍。
|
||||
|
||||
use std::collections::HashMap;
|
||||
|
||||
use serde_json::Value;
|
||||
use shared_contracts::model3d::common::Model3dTextureVersion;
|
||||
|
||||
const EXTRA_TEXTURE_VERSION: &str = "texture_version";
|
||||
const EXTRA_DELIGHT: &str = "delight";
|
||||
|
||||
/// 按 provider 需要的键名构造 `extra`;未提供的参数不写入,由 provider 取默认值。
|
||||
pub(crate) fn extra_fields(
|
||||
texture_version: Option<Model3dTextureVersion>,
|
||||
delight: Option<bool>,
|
||||
) -> HashMap<String, Value> {
|
||||
let mut extra = HashMap::new();
|
||||
if let Some(value) = texture_version {
|
||||
extra.insert(
|
||||
EXTRA_TEXTURE_VERSION.into(),
|
||||
Value::String(value.as_str().into()),
|
||||
);
|
||||
}
|
||||
if let Some(value) = delight {
|
||||
extra.insert(EXTRA_DELIGHT.into(), Value::Bool(value));
|
||||
}
|
||||
extra
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
mod client;
|
||||
mod config;
|
||||
mod error;
|
||||
mod extra;
|
||||
mod mapping;
|
||||
mod types;
|
||||
mod validation;
|
||||
@@ -8,6 +9,7 @@ mod validation;
|
||||
pub use client::TripoProviderClient;
|
||||
pub use config::TripoSettings;
|
||||
pub use error::{TripoError, TripoField, TripoValidationReason};
|
||||
pub(crate) use extra::extra_fields;
|
||||
pub(crate) use mapping::map_task;
|
||||
pub use types::{
|
||||
TripoDownloadedArtifact, TripoTaskFailure, TripoTaskHandle, TripoTaskOutput, TripoTaskSnapshot,
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
use shared_contracts::model3d::common::{
|
||||
Model3dCompression, Model3dExportOrientation, Model3dGeometryQuality, Model3dInputOrientation,
|
||||
Model3dTextureAlignment, Model3dTextureQuality, Model3dTextureVersion,
|
||||
Model3dTextureAlignment, Model3dTextureQuality,
|
||||
};
|
||||
use shared_contracts::model3d::image_to_model::Model3dImageToModelParams;
|
||||
use tripo3d_sdk::{models::FileInput, params::ImageToModelParams};
|
||||
|
||||
use crate::common::{
|
||||
TripoError, TripoField, TripoProviderClient, TripoTaskHandle, TripoValidationReason,
|
||||
extra_fields,
|
||||
};
|
||||
|
||||
use super::validation::validate_image_to_model_params;
|
||||
@@ -150,20 +151,3 @@ fn to_sdk_params(input: FileInput, params: &Model3dImageToModelParams) -> ImageT
|
||||
style: None,
|
||||
}
|
||||
}
|
||||
|
||||
fn extra_fields(
|
||||
texture_version: Option<Model3dTextureVersion>,
|
||||
delight: Option<bool>,
|
||||
) -> std::collections::HashMap<String, serde_json::Value> {
|
||||
let mut extra = std::collections::HashMap::new();
|
||||
if let Some(value) = texture_version {
|
||||
extra.insert(
|
||||
"texture_version".into(),
|
||||
serde_json::Value::String(value.as_str().into()),
|
||||
);
|
||||
}
|
||||
if let Some(value) = delight {
|
||||
extra.insert("delight".into(), serde_json::Value::Bool(value));
|
||||
}
|
||||
extra
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ use tripo3d_sdk::{models::FileInput, params::MultiviewToModelParams};
|
||||
|
||||
use crate::common::{
|
||||
TripoError, TripoField, TripoGenerationOptions, TripoProviderClient, TripoTaskHandle,
|
||||
TripoValidationReason, validate_generation_options, validate_task_id,
|
||||
TripoValidationReason, extra_fields, validate_generation_options, validate_task_id,
|
||||
};
|
||||
|
||||
impl TripoProviderClient {
|
||||
@@ -106,17 +106,7 @@ fn to_sdk_params(request: &Model3dMultiviewToModelRequest) -> MultiviewToModelPa
|
||||
.texture_quality
|
||||
.map(Model3dTextureQuality::as_str)
|
||||
.map(str::to_owned);
|
||||
if let Some(value) = request.texture_version {
|
||||
params.extra.insert(
|
||||
"texture_version".into(),
|
||||
serde_json::Value::String(value.as_str().into()),
|
||||
);
|
||||
}
|
||||
if let Some(value) = request.delight {
|
||||
params
|
||||
.extra
|
||||
.insert("delight".into(), serde_json::Value::Bool(value));
|
||||
}
|
||||
params.extra = extra_fields(request.texture_version, request.delight);
|
||||
params.geometry_quality = request
|
||||
.geometry_quality
|
||||
.map(Model3dGeometryQuality::as_str)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
use crate::common::{TripoError, TripoProviderClient, TripoTaskHandle};
|
||||
use crate::common::{TripoError, TripoProviderClient, TripoTaskHandle, extra_fields};
|
||||
use shared_contracts::model3d::common::{
|
||||
Model3dCompression, Model3dExportOrientation, Model3dGeometryQuality, Model3dTextureQuality,
|
||||
Model3dTextureVersion,
|
||||
};
|
||||
use shared_contracts::model3d::text_to_model::Model3dTextToModelParams;
|
||||
|
||||
@@ -58,20 +57,3 @@ fn to_sdk_params(params: &Model3dTextToModelParams) -> tripo3d_sdk::params::Text
|
||||
style: None,
|
||||
}
|
||||
}
|
||||
|
||||
fn extra_fields(
|
||||
texture_version: Option<Model3dTextureVersion>,
|
||||
delight: Option<bool>,
|
||||
) -> std::collections::HashMap<String, serde_json::Value> {
|
||||
let mut extra = std::collections::HashMap::new();
|
||||
if let Some(value) = texture_version {
|
||||
extra.insert(
|
||||
"texture_version".into(),
|
||||
serde_json::Value::String(value.as_str().into()),
|
||||
);
|
||||
}
|
||||
if let Some(value) = delight {
|
||||
extra.insert("delight".into(), serde_json::Value::Bool(value));
|
||||
}
|
||||
extra
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user