ex_cli/
error.rs

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}