use std::{error, fmt};
use zbus::zvariant;
#[derive(Debug)]
#[non_exhaustive]
pub enum Error {
Crypto(&'static str),
Zbus(zbus::Error),
ZbusFdo(zbus::fdo::Error),
Zvariant(zvariant::Error),
Locked,
NoResult,
Prompt,
Unavailable,
}
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Error::Crypto(err) => write!(f, "Crypto error: {err}"),
Error::Zbus(err) => write!(f, "zbus error: {err}"),
Error::ZbusFdo(err) => write!(f, "zbus fdo error: {err}"),
Error::Zvariant(err) => write!(f, "zbus serde error: {err}"),
Error::Locked => f.write_str("SS Error: object locked"),
Error::NoResult => f.write_str("SS error: result not returned from SS API"),
Error::Prompt => f.write_str("SS error: prompt dismissed"),
Error::Unavailable => f.write_str("no secret service provider or dbus session found"),
}
}
}
impl error::Error for Error {
fn source(&self) -> Option<&(dyn error::Error + 'static)> {
match *self {
Error::Zbus(ref err) => Some(err),
Error::ZbusFdo(ref err) => Some(err),
Error::Zvariant(ref err) => Some(err),
_ => None,
}
}
}
impl From<zbus::Error> for Error {
fn from(err: zbus::Error) -> Error {
Error::Zbus(err)
}
}
impl From<zbus::fdo::Error> for Error {
fn from(err: zbus::fdo::Error) -> Error {
Error::ZbusFdo(err)
}
}
impl From<zvariant::Error> for Error {
fn from(err: zvariant::Error) -> Error {
Error::Zvariant(err)
}
}