补充 Raw 图片参数预检查
在计费前校验质量、背景和输出格式 规范化可选参数并保持单图请求契约
This commit is contained in:
@@ -119,6 +119,24 @@ fn prepare_request(payload: RawImageEditRequest) -> Result<PreparedRawImageEdit,
|
||||
if payload.width == 0 || payload.height == 0 {
|
||||
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 mask = payload
|
||||
.mask
|
||||
@@ -128,9 +146,9 @@ fn prepare_request(payload: RawImageEditRequest) -> Result<PreparedRawImageEdit,
|
||||
image,
|
||||
prompt: payload.prompt,
|
||||
options: RawImageEditOptions {
|
||||
quality: payload.quality,
|
||||
background: payload.background,
|
||||
output_format: payload.output_format,
|
||||
quality,
|
||||
background,
|
||||
output_format,
|
||||
width: payload.width,
|
||||
height: payload.height,
|
||||
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> {
|
||||
let mime_type = value.mime_type.trim().to_string();
|
||||
if mime_type.is_empty() {
|
||||
|
||||
Reference in New Issue
Block a user