1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
use std::{fmt, io};
use requestty::ErrorKind;
use std::error::Error;
use RunError::*;
pub type Result<T> = std::result::Result<T, RunError>;
#[derive(Debug)]
pub enum RunError {
ClapNotUsize,
NoSearchResults,
ImdbIdNotFound(String),
NameNotFound(String),
Reqwest(reqwest::Error),
InputUserHalted,
InputIo(io::Error),
NoDesiredSearchResults,
}
impl RunError {
pub fn error_code(&self) -> i32 {
match self {
ClapNotUsize => 1,
NoSearchResults => 1,
ImdbIdNotFound(_) => 2,
NameNotFound(_) => 2,
Reqwest(_) => 2,
InputUserHalted => 1,
InputIo(_) => 2,
NoDesiredSearchResults => 0,
}
}
}
impl fmt::Display for RunError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ClapNotUsize => write!(f, "expected a positive integer"),
NoSearchResults => write!(f, "No search results"),
ImdbIdNotFound(s) => write!(f, "IMDb ID not found, please raise an issue if you are able to see the ID in the following text: {:?}", s),
NameNotFound(s) => write!(f, "Movie/Show name not found, please raise an issue if you are able to see a name in the following text: {:?}", s),
Reqwest(reqwest_err) => write!(f, "Issue with web request: {}", reqwest_err),
InputUserHalted => write!(f, "Program halted at user request"),
InputIo(io_err) => write!(f, "IO error: {}", io_err),
NoDesiredSearchResults => write!(f, "You couldn't find what you wanted :("),
}
}
}
impl Error for RunError {}
impl From<reqwest::Error> for RunError {
fn from(reqwest_err: reqwest::Error) -> Self {
Reqwest(reqwest_err)
}
}
impl From<requestty::ErrorKind> for RunError {
fn from(requestty_err: ErrorKind) -> Self {
use requestty::ErrorKind::*;
match requestty_err {
Eof | Interrupted => InputUserHalted,
IoError(io_err) => Self::from(io_err),
}
}
}
impl From<io::Error> for RunError {
fn from(io_err: io::Error) -> Self {
InputIo(io_err)
}
}