1use std::path::Path;
2use std::{io, num};
3use thiserror::Error;
4
5pub type MyResult<T> = Result<T, MyError>;
6
7#[derive(Error, Debug)]
8pub enum MyError {
9 #[error(transparent)]
10 Chrono(#[from] chrono::ParseError),
11 #[error(transparent)]
12 Clap(#[from] clap::error::Error),
13 #[error("{0}: {1}")]
14 Glob(glob::PatternError, String),
15 #[error(transparent)]
16 Io(#[from] io::Error),
17 #[error("{0}: {1}")]
18 Io2(io::Error, String),
19 #[error(transparent)]
20 ParseInt(#[from] num::ParseIntError),
21 #[error("{0}: {1}")]
22 PkZip(zip::result::ZipError, String),
23 #[error(transparent)]
24 Regex(#[from] regex::Error),
25 #[error("{0}: {1}")]
26 SevenZ(sevenz_rust2::Error, String),
27 #[error(transparent)]
28 Walk(#[from] walkdir::Error),
29 #[error("{0}")]
30 Text(String),
31}
32
33impl MyError {
34 pub fn eprint(&self) {
35 let error = self.to_string();
36 let error = error.trim_end();
37 eprintln!("{error}");
38 }
39}
40
41impl From<(glob::PatternError, &String)> for MyError {
42 fn from(value: (glob::PatternError, &String)) -> Self {
43 let (error, glob) = value;
44 let glob = glob.to_string();
45 Self::Glob(error, glob)
46 }
47}
48
49impl From<(io::Error, &Path)> for MyError {
50 fn from(value: (io::Error, &Path)) -> Self {
51 let (error, path) = value;
52 let path = path.display().to_string();
53 Self::Io2(error, path)
54 }
55}
56
57impl From<(zip::result::ZipError, &Path)> for MyError {
58 fn from(value: (zip::result::ZipError, &Path)) -> Self {
59 let (error, path) = value;
60 let path = path.display().to_string();
61 Self::PkZip(error, path)
62 }
63}
64
65impl From<(sevenz_rust2::Error, &Path)> for MyError {
66 fn from(value: (sevenz_rust2::Error, &Path)) -> Self {
67 let (error, path) = value;
68 let path = path.display().to_string();
69 Self::SevenZ(error, path)
70 }
71}
72
73impl From<&str> for MyError {
74 fn from(error: &str) -> Self {
75 let error = error.to_string();
76 Self::Text(error)
77 }
78}