1use 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
34pub 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}