snipt_core/
error.rs

1use std::fmt;
2use std::io;
3
4#[derive(Debug)]
5pub enum SniptError {
6    Io(io::Error),
7    Json(serde_json::Error),
8    Enigo(String), // Changed from specific Error types
9    Keyboard(String),
10    DatabaseNotFound(String),
11    DaemonAlreadyRunning(u32),
12    DaemonNotRunning,
13    InvalidPid,
14    InvalidConfig(String),
15    Clipboard(String),
16    Other(String),
17    PermissionDenied(String),
18}
19
20impl fmt::Display for SniptError {
21    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
22        match self {
23            SniptError::Io(err) => write!(f, "I/O error: {}", err),
24            SniptError::Json(err) => write!(f, "JSON error: {}", err),
25            SniptError::Enigo(err) => write!(f, "Keyboard controller error: {}", err),
26            SniptError::Keyboard(err) => write!(f, "Keyboard error: {}", err),
27            SniptError::DatabaseNotFound(path) => write!(f, "Database not found at: {}", path),
28            SniptError::DaemonAlreadyRunning(pid) => {
29                write!(f, "Daemon already running with PID {}", pid)
30            }
31            SniptError::DaemonNotRunning => write!(f, "Daemon is not running"),
32            SniptError::InvalidPid => write!(f, "Invalid PID in daemon file"),
33            SniptError::InvalidConfig(msg) => write!(f, "Invalid configuration: {}", msg),
34            SniptError::Clipboard(msg) => write!(f, "Clipboard error: {}", msg),
35            SniptError::Other(msg) => write!(f, "Error: {}", msg),
36            SniptError::PermissionDenied(msg) => write!(f, "Permission denied: {}", msg),
37        }
38    }
39}
40
41impl std::error::Error for SniptError {}
42
43impl From<io::Error> for SniptError {
44    fn from(err: io::Error) -> Self {
45        SniptError::Io(err)
46    }
47}
48
49impl From<serde_json::Error> for SniptError {
50    fn from(err: serde_json::Error) -> Self {
51        SniptError::Json(err)
52    }
53}
54
55pub type Result<T> = std::result::Result<T, SniptError>;