docker_stats/
error.rs

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>;