补充 Raw 图片参数预检查

在计费前校验质量、背景和输出格式

规范化可选参数并保持单图请求契约
This commit is contained in:
2026-09-08 10:40:09 +08:00
parent 4e1316e272
commit 18d60feb04
+41 -3
View File
@@ -119,6 +119,24 @@ fn prepare_request(payload: RawImageEditRequest) -> Result<PreparedRawImageEdit,
if payload.width == 0 || payload.height == 0 { if payload.width == 0 || payload.height == 0 {
return Err(bad_request("width 和 height 必须为正整数")); return Err(bad_request("width 和 height 必须为正整数"));
} }
validate_optional_value(
payload.quality.as_deref(),
"quality",
["low", "medium", "high", "auto"],
)?;
validate_optional_value(
payload.background.as_deref(),
"background",
["transparent", "opaque", "auto"],
)?;
validate_optional_value(
payload.output_format.as_deref(),
"output_format",
["png", "webp", "jpeg"],
)?;
let quality = normalize_optional(payload.quality);
let background = normalize_optional(payload.background);
let output_format = normalize_optional(payload.output_format);
let image = decode_image(payload.image, "image")?; let image = decode_image(payload.image, "image")?;
let mask = payload let mask = payload
.mask .mask
@@ -128,9 +146,9 @@ fn prepare_request(payload: RawImageEditRequest) -> Result<PreparedRawImageEdit,
image, image,
prompt: payload.prompt, prompt: payload.prompt,
options: RawImageEditOptions { options: RawImageEditOptions {
quality: payload.quality, quality,
background: payload.background, background,
output_format: payload.output_format, output_format,
width: payload.width, width: payload.width,
height: payload.height, height: payload.height,
mask, mask,
@@ -140,6 +158,26 @@ fn prepare_request(payload: RawImageEditRequest) -> Result<PreparedRawImageEdit,
}) })
} }
fn normalize_optional(value: Option<String>) -> Option<String> {
value
.map(|value| value.trim().to_string())
.filter(|value| !value.is_empty())
}
fn validate_optional_value<const N: usize>(
value: Option<&str>,
field: &str,
allowed: [&str; N],
) -> Result<(), AppError> {
let Some(value) = value.map(str::trim).filter(|value| !value.is_empty()) else {
return Ok(());
};
if allowed.contains(&value) {
return Ok(());
}
Err(bad_request(format!("{field} 值无效")))
}
fn decode_image(value: RawImageData, field: &str) -> Result<ReferenceImage, AppError> { fn decode_image(value: RawImageData, field: &str) -> Result<ReferenceImage, AppError> {
let mime_type = value.mime_type.trim().to_string(); let mime_type = value.mime_type.trim().to_string();
if mime_type.is_empty() { if mime_type.is_empty() {