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