Skip to main content

video_subtitle/
error.rs

1//! 库内统一错误类型与 [`Result`] 别名。
2
3use std::path::PathBuf;
4use thiserror::Error;
5
6/// 本库所有可恢复错误的 [`Result`] 别名。
7pub type Result<T> = std::result::Result<T, AppError>;
8
9/// 流水线各阶段可能产生的错误。
10#[derive(Debug, Error)]
11pub enum AppError {
12    /// 系统 PATH 中未找到 `ffmpeg`,且未通过 CLI `--ffmpeg` 指定有效路径。
13    #[error("未找到 ffmpeg,请安装并加入 PATH,或通过 --ffmpeg 指定路径")]
14    FfmpegNotFound,
15
16    /// FFmpeg 子进程以非零状态退出。
17    #[error("ffmpeg 执行失败 (退出码 {code:?}): {stderr}")]
18    FfmpegFailed {
19        /// 进程退出码;被信号终止时可能为 `None`。
20        code: Option<i32>,
21        /// FFmpeg 标准错误输出(已去除首尾空白)。
22        stderr: String,
23    },
24
25    /// 文件读写等标准库 IO 错误。
26    #[error("IO 错误: {0}")]
27    Io(#[from] std::io::Error),
28
29    /// `whisper-rs` / whisper.cpp 推理或模型加载失败。
30    #[error("Whisper 错误: {0}")]
31    Whisper(#[from] whisper_rs::WhisperError),
32
33    /// WAV 格式不符合要求,或样本读取失败。
34    #[error("音频读取错误: {0}")]
35    Audio(String),
36
37    /// 输入视频、模型路径等不存在或不可作为 UTF-8 路径使用。
38    #[error("路径无效: {0}")]
39    InvalidPath(PathBuf),
40
41    /// 其它未分类错误(预留扩展)。
42    #[error("{0}")]
43    Other(String),
44}