refactor: 优化图像输入源设计,重构为零污染的 TryFromImage 特征
- 移除原有的 ImageInput 枚举,避免运行时匹配与所有权限制 - 引入自定义 TryFromImage 特征,专用于将不同来源安全转换为 ImageSource - 优化错误处理新增 InvalidBase64Header 错误信息 - 迁移 load_image_from_input 到 image_helper.rs 为后续剥离到业务层做准备
This commit is contained in:
@@ -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>;
|
||||
|
||||
Reference in New Issue
Block a user