1use std::fmt::Display;
2use thiserror::Error;
3
4#[derive(Error, Debug)]
5pub enum Error {
6 #[error("Workspace not found")]
7 WorkspaceNotFound,
8 #[error("Action not found")]
9 ActionNotFound,
10 #[error("No screens found")]
11 NoScreensFound,
12 #[error("Window not found")]
13 WindowNotFound,
14 #[error("Failed to get window manager class")]
15 FailedToGetWmClass,
16 #[error("No mouse move start")]
17 NoMouseMoveStart,
18 #[error("No butten press geometry")]
19 NoButtonPressGeometry,
20 #[error("Failed to deserialize from JSON: {0}")]
21 FailedToDeserializeFromJson(String),
22 #[error(transparent)]
23 Error(#[from] ron::error::Error),
24 #[error(transparent)]
25 Io(#[from] std::io::Error),
26 #[error(transparent)]
27 FromUtf8(#[from] std::string::FromUtf8Error),
28 #[error(transparent)]
29 XcbGeneric(#[from] xcb::GenericError),
30}
31
32pub type Result<T, E = Error> = std::result::Result<T, E>;
33
34pub trait LogError<T> {
35 fn log(self) -> Option<T>;
40}
41
42impl<T, E: Display> LogError<T> for Result<T, E> {
43 fn log(self) -> Option<T> {
44 match self {
45 Ok(x) => Some(x),
46 Err(e) => {
47 eprintln!("{}", e);
48 None
49 }
50 }
51 }
52}