模型版本清单从声明表派生避免漏加新版本
- Model3dModelVersion 的变体、线上值与 ALL 改为由 model3d_model_versions! 单一声明表生成 - ALL 类型改为 &'static [Self],新增版本只需在声明表加一行 - 定价校验与测试的遍历改用 iter().copied()
This commit is contained in:
@@ -178,7 +178,7 @@ impl Model3dPricingConfig {
|
||||
.base_prices
|
||||
.get(&endpoint)
|
||||
.ok_or_else(|| format!("缺少 endpoint {} 的底价表", endpoint.as_str()))?;
|
||||
for model_version in Model3dModelVersion::ALL {
|
||||
for model_version in Model3dModelVersion::ALL.iter().copied() {
|
||||
if !prices.contains_key(&model_version) {
|
||||
return Err(format!(
|
||||
"缺少 endpoint {} 模型 {} 的底价",
|
||||
@@ -255,7 +255,8 @@ mod tests {
|
||||
texture: u32,
|
||||
) -> BTreeMap<Model3dModelVersion, Model3dBasePrice> {
|
||||
Model3dModelVersion::ALL
|
||||
.into_iter()
|
||||
.iter()
|
||||
.copied()
|
||||
.map(|version| {
|
||||
(
|
||||
version,
|
||||
|
||||
@@ -2,22 +2,32 @@ use serde::{Deserialize, Serialize};
|
||||
|
||||
use super::MODEL3D_TS_EXPORT_DIR;
|
||||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize, ts_rs::TS)]
|
||||
#[ts(export, export_to = MODEL3D_TS_EXPORT_DIR)]
|
||||
pub enum Model3dModelVersion {
|
||||
#[serde(rename = "v3.1-20260211")]
|
||||
H31,
|
||||
#[serde(rename = "v3.0-20250812")]
|
||||
H30,
|
||||
#[serde(rename = "v2.5-20250123")]
|
||||
H25,
|
||||
#[serde(rename = "P1-20260311")]
|
||||
P1,
|
||||
#[serde(rename = "P2-20260801")]
|
||||
P2,
|
||||
/// 3D 模型版本的**唯一**声明表:枚举变体、线上值(serde rename)、ts-rs 绑定与 `ALL`
|
||||
/// 全部由下面这张表派生,新增版本只需在表里加一行。
|
||||
macro_rules! model3d_model_versions {
|
||||
($($variant:ident => $wire:literal),+ $(,)?) => {
|
||||
#[derive(
|
||||
Clone, Copy, Debug, Deserialize, Eq, Ord, PartialEq, PartialOrd, Serialize, ts_rs::TS,
|
||||
)]
|
||||
#[ts(export, export_to = MODEL3D_TS_EXPORT_DIR)]
|
||||
pub enum Model3dModelVersion {
|
||||
$(
|
||||
#[serde(rename = $wire)]
|
||||
$variant,
|
||||
)+
|
||||
}
|
||||
|
||||
impl Model3dModelVersion {
|
||||
/// 契约支持的全部模型版本(按声明顺序);定价配置必须为每个版本给出两个端点的底价。
|
||||
pub const ALL: &'static [Self] = &[$(Self::$variant,)+];
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl Model3dModelVersion {
|
||||
/// 契约支持的全部模型版本;定价配置必须为每个版本给出两个端点的底价。
|
||||
pub const ALL: [Self; 5] = [Self::H31, Self::H30, Self::H25, Self::P1, Self::P2];
|
||||
model3d_model_versions! {
|
||||
H31 => "v3.1-20260211",
|
||||
H30 => "v3.0-20250812",
|
||||
H25 => "v2.5-20250123",
|
||||
P1 => "P1-20260311",
|
||||
P2 => "P2-20260801",
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user