1use zbus::zvariant;
2
3#[derive(Debug)]
5#[non_exhaustive]
6pub enum Error {
7 Crypto(&'static str),
9 Zbus(zbus::Error),
11 ZbusFdo(zbus::fdo::Error),
13 Zvariant(zvariant::Error),
15 Locked,
18 NoResult,
20 Prompt,
22 PromptDisconnected,
25 Unavailable,
28}
29
30impl std::fmt::Display for Error {
31 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
32 match self {
33 Error::Crypto(err) => write!(f, "Crypto error: {err}"),
34 Error::Zbus(err) => write!(f, "zbus error: {err}"),
35 Error::ZbusFdo(err) => write!(f, "zbus fdo error: {err}"),
36 Error::Zvariant(err) => write!(f, "zbus serde error: {err}"),
37 Error::Locked => f.write_str("SS Error: object locked"),
38 Error::NoResult => f.write_str("SS error: result not returned from SS API"),
39 Error::Prompt => f.write_str("SS error: prompt dismissed"),
40 Error::PromptDisconnected => {
41 f.write_str("SS error: connection closed before prompt completed")
42 }
43 Error::Unavailable => f.write_str("no secret service provider or dbus session found"),
44 }
45 }
46}
47
48impl std::error::Error for Error {
49 fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
50 match *self {
51 Error::Zbus(ref err) => Some(err),
52 Error::ZbusFdo(ref err) => Some(err),
53 Error::Zvariant(ref err) => Some(err),
54 _ => None,
55 }
56 }
57}
58
59impl From<zbus::Error> for Error {
60 fn from(err: zbus::Error) -> Error {
61 Error::Zbus(err)
62 }
63}
64
65impl From<zbus::fdo::Error> for Error {
66 fn from(err: zbus::fdo::Error) -> Error {
67 Error::ZbusFdo(err)
68 }
69}
70
71impl From<zvariant::Error> for Error {
72 fn from(err: zvariant::Error) -> Error {
73 Error::Zvariant(err)
74 }
75}