refactor: 优化图像输入源设计,重构为零污染的 TryFromImage 特征

- 移除原有的 ImageInput 枚举,避免运行时匹配与所有权限制
- 引入自定义 TryFromImage 特征,专用于将不同来源安全转换为 ImageSource
- 优化错误处理新增 InvalidBase64Header 错误信息
- 迁移 load_image_from_input 到 image_helper.rs 为后续剥离到业务层做准备
This commit is contained in:
2026-07-16 14:13:56 +08:00
parent cd70748393
commit 4f6987f594
8 changed files with 284 additions and 167 deletions

View File

@@ -21,8 +21,12 @@ use thiserror::Error;
#[derive(Error, Debug)]
pub enum DdddError {
// 【新增】专门处理文件读取、路径不存在等原生 I/O 错误
#[error("系统网络或文件 I/O 异常: {0}")]
Io(#[from] std::io::Error),
#[error("图像预处理失败: {0}")]
PreprocessError(String),
PreprocessError(#[from] ImagePreprocessReason),
#[error("模型推理引擎内部发生异常: {0}")]
EngineError(#[from] anyhow::Error),
@@ -46,5 +50,27 @@ pub enum DdddError {
InternalError(String),
}
/// 专门服务于预处理的子错误枚举,保留全部底层上下文
#[derive(Error, Debug)]
pub enum ImagePreprocessReason {
#[error("图片加载或文件 I/O 失败: {0}")]
ImageIo(#[from] image::ImageError),
#[error("图片转矩阵矩阵(ndarray)失败: {0}")]
NdarrayError(#[from] ndarray::ShapeError),
#[error("Base64 解码失败: {0}")]
Base64(#[from] base64::DecodeError),
#[error("Base64 头部格式不正确,缺少 ';base64,' 分隔符")]
InvalidBase64Header,
#[error("不支持的通道数: {0}")]
UnsupportedChannels(usize),
#[error("其他预处理错误: {0}")]
Custom(String),
}
/// 统一用我们自己的 DdddError 包装 Result
pub type Result<T> = std::result::Result<T, DdddError>;