Skip to main content

ybd_core/
error.rs

1//! 错误类型与异常处理模块
2//!
3//! 定义库全局使用的错误枚举与通用错误输出格式化函数。
4
5use std::io;
6
7use colored::Colorize;
8use thiserror::Error;
9
10#[derive(Error, Debug)]
11pub enum Error {
12        #[error("wrong path info: {0}")]
13        Path(String),
14        #[error("Configuration file parsing error: {0}")]
15        Parse(#[from] serde_json::Error),
16        #[error("IO error: {0}")]
17        FetchIO(#[from] reqwest::Error),
18        #[error("IO error: {0}")]
19        StdFileIO(#[from] io::Error),
20        #[error("unknown error")]
21        Unknown(),
22        #[error("semaphore closed")]
23        SemaphoreAcquire(#[from] tokio::sync::AcquireError),
24        #[error("error field during build: {0}")]
25        Build(String),
26        #[error("norlmal error: {0}")]
27        Normal(String),
28        #[error("mp4meta error: {0}")]
29        Mp4metaError(#[from] mp4ameta::Error),
30}
31
32pub type Result<T> = std::result::Result<T, Error>;
33
34/// 统一错误处理
35///
36/// * `error`: 错误类型
37pub fn default_error_handler(error: Error) {
38        eprintln!("\n\t{}", "──────────────────────────────────────────".red());
39        eprintln!(
40                "\t{} {}",
41                "✗ Error:".red().bold(),
42                error.to_string().yellow()
43        );
44        eprintln!("\t{}\n", "──────────────────────────────────────────".red());
45}
46
47#[test]
48fn error_handle() {
49        let pe = Error::Path("nihao".into());
50        default_error_handler(pe);
51}