1use std::fmt;
2
3#[derive(Debug)]
4pub enum AppError {
5 DockerNotFound,
6 DockerNotRunning,
7 #[allow(dead_code)]
8 JsonParseError(String),
9 IoError(std::io::Error),
10 TerminalError(String)
11}
12
13impl fmt::Display for AppError {
14 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
15 match self {
16 AppError::DockerNotFound => write!(f, "Docker command not found. Please install Docker."),
17 AppError::DockerNotRunning => write!(f, "Docker daemon is not running. Please start Docker."),
18 AppError::JsonParseError(msg) => write!(f, "Failed to parse Docker stats: {msg}"),
19 AppError::IoError(err) => write!(f, "IO error: {err}"),
20 AppError::TerminalError(msg) => write!(f, "Terminal error: {msg}")
21 }
22 }
23}
24
25impl std::error::Error for AppError {}
26
27impl From<std::io::Error> for AppError {
28 fn from(err: std::io::Error) -> Self {
29 match err.kind() {
30 std::io::ErrorKind::NotFound => AppError::DockerNotFound,
31 std::io::ErrorKind::ConnectionRefused => AppError::DockerNotRunning,
32 _ => AppError::IoError(err)
33 }
34 }
35}
36
37#[allow(dead_code)]
38pub type Result<T> = std::result::Result<T, AppError>;