1use std::backtrace::Backtrace;
3
4use dbus::Error as DBusError;
5use thiserror::Error;
6
7#[derive(Error, Debug)]
8pub enum LogindError {
9 #[error("XDG_SESSION_ID not set")]
10 NoSessionId { backtrace: Backtrace },
11
12 #[error("Could not subscribe to {signal}")]
13 MatchFailed {
14 signal: &'static str,
15 #[source]
16 source: DBusError,
17 backtrace: Backtrace,
18 },
19
20 #[error("D-Bus operation failed")]
22 DBusError {
23 #[from]
24 #[source]
25 source: DBusError,
26 backtrace: Backtrace,
27 },
28
29 #[error("{message}")]
30 InhibitorFileError {
31 message: String,
32 #[source]
33 source: nix::Error,
34 backtrace: Backtrace,
35 },
36}
37
38impl LogindError {
39 pub fn no_session_id() -> LogindError {
40 LogindError::NoSessionId {
41 backtrace: Backtrace::capture(),
42 }
43 }
44
45 pub fn match_failed(signal: &'static str, error: DBusError) -> LogindError {
46 LogindError::MatchFailed {
47 signal,
48 source: error,
49 backtrace: Backtrace::capture(),
50 }
51 }
52
53 pub fn inhibitor_file_error(message: String, error: nix::Error) -> LogindError {
54 LogindError::InhibitorFileError {
55 message,
56 source: error,
57 backtrace: Backtrace::capture(),
58 }
59 }
60}