Skip to main content

doobs_mpris/
error.rs

1// SPDX-License-Identifier: MPL-2.0
2
3/// The error type for [doobs_mpris][crate].
4#[derive(Debug, thiserror::Error)]
5pub enum Error {
6    /// Invalid enum variant when converting from String.
7    #[error("Invalid enum variant: {got}, expected something in {expected:?}")]
8    InvalidEnum {
9        got: String,
10        expected: &'static [&'static str],
11    },
12
13    /// Incorrect value when converting from zvariant.
14    #[error("Tried to convert Value::{wanted}, but it was {actual:?}")]
15    IncorrectValue {
16        wanted: &'static str,
17        actual: zvariant::OwnedValue,
18    },
19
20    #[error("Failed to parse as a timestamp")]
21    InvalidTimestamp(#[from] jiff::Error),
22
23    /// A zbus error.
24    #[error("zbus error: {0}")]
25    Zbus(zbus::Error),
26
27    /// A zbus::fdo error.
28    #[error("zbus fdo error: {0}")]
29    Fdo(zbus::fdo::Error),
30}
31
32impl From<zbus::fdo::Error> for Error {
33    fn from(err: zbus::fdo::Error) -> Self {
34        match err {
35            zbus::fdo::Error::ZBus(err) => Self::Zbus(err),
36            _ => Self::Fdo(err),
37        }
38    }
39}
40
41impl From<zbus::Error> for Error {
42    fn from(err: zbus::Error) -> Self {
43        match err {
44            zbus::Error::FDO(err) => Self::Fdo(*err),
45            _ => Self::Zbus(err),
46        }
47    }
48}
49
50impl From<Error> for zvariant::Error {
51    fn from(err: Error) -> Self {
52        Self::Message(err.to_string())
53    }
54}
55
56/// Alias for [Result][std::result::Result] with the error type [doobs_mpris::Error][crate::Error].
57pub type Result<T> = std::result::Result<T, Error>;