Skip to main content

desk_logind/
error.rs

1//! Logind error type
2use 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    // TODO: add more specific error cases as they come up
21    #[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}