1use std::{convert::Infallible, error, fmt};
2use zvariant::Error as VariantError;
3
4#[derive(Clone, Debug)]
8#[non_exhaustive]
9pub enum Error {
10 Variant(VariantError),
11 #[deprecated(
14 since = "4.1.0",
15 note = "This variant is no longer returned from any of our API.\
16 Use `Error::InvalidName` instead."
17 )]
18 InvalidBusName(String, String),
19 #[deprecated(
21 since = "4.1.0",
22 note = "This variant is no longer returned from any of our API.\
23 Use `Error::InvalidName` instead."
24 )]
25 InvalidWellKnownName(String),
26 #[deprecated(
28 since = "4.1.0",
29 note = "This variant is no longer returned from any of our API.\
30 Use `Error::InvalidName` instead."
31 )]
32 InvalidUniqueName(String),
33 #[deprecated(
35 since = "4.1.0",
36 note = "This variant is no longer returned from any of our API.\
37 Use `Error::InvalidName` instead."
38 )]
39 InvalidInterfaceName(String),
40 #[deprecated(
42 since = "4.1.0",
43 note = "This variant is no longer returned from any of our API.\
44 Use `Error::InvalidName` instead."
45 )]
46 InvalidMemberName(String),
47 #[deprecated(
49 since = "4.1.0",
50 note = "This variant is no longer returned from any of our API.\
51 Use `Error::InvalidName` instead."
52 )]
53 InvalidPropertyName(String),
54 #[deprecated(
56 since = "4.1.0",
57 note = "This variant is no longer returned from any of our API.\
58 Use `Error::InvalidName` instead."
59 )]
60 InvalidErrorName(String),
61 InvalidName(&'static str),
63 InvalidNameConversion {
65 from: &'static str,
66 to: &'static str,
67 },
68}
69
70impl PartialEq for Error {
71 #[allow(deprecated)]
72 fn eq(&self, other: &Self) -> bool {
73 match (self, other) {
74 (Self::InvalidBusName(_, _), Self::InvalidBusName(_, _)) => true,
75 (Self::InvalidWellKnownName(_), Self::InvalidWellKnownName(_)) => true,
76 (Self::InvalidUniqueName(_), Self::InvalidUniqueName(_)) => true,
77 (Self::InvalidInterfaceName(_), Self::InvalidInterfaceName(_)) => true,
78 (Self::InvalidMemberName(_), Self::InvalidMemberName(_)) => true,
79 (Self::InvalidPropertyName(_), Self::InvalidPropertyName(_)) => true,
80 (Self::InvalidErrorName(_), Self::InvalidErrorName(_)) => true,
81 (Self::InvalidName(_), Self::InvalidName(_)) => true,
82 (Self::InvalidNameConversion { .. }, Self::InvalidNameConversion { .. }) => true,
83 (Self::Variant(s), Self::Variant(o)) => s == o,
84 (_, _) => false,
85 }
86 }
87}
88
89impl error::Error for Error {
90 #[allow(deprecated)]
91 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
92 match self {
93 Error::InvalidBusName(_, _) => None,
94 Error::InvalidWellKnownName(_) => None,
95 Error::InvalidUniqueName(_) => None,
96 Error::InvalidInterfaceName(_) => None,
97 Error::InvalidErrorName(_) => None,
98 Error::InvalidMemberName(_) => None,
99 Error::InvalidPropertyName(_) => None,
100 Error::InvalidName(_) => None,
101 Error::InvalidNameConversion { .. } => None,
102 Error::Variant(e) => Some(e),
103 }
104 }
105}
106
107impl fmt::Display for Error {
108 #[allow(deprecated)]
109 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
110 match self {
111 Error::Variant(e) => write!(f, "{e}"),
112 Error::InvalidBusName(unique_err, well_known_err) => {
113 write!(
114 f,
115 "Neither a valid unique ({unique_err}) nor a well-known ({well_known_err}) bus name"
116 )
117 }
118 Error::InvalidWellKnownName(s) => write!(f, "Invalid well-known bus name: {s}"),
119 Error::InvalidUniqueName(s) => write!(f, "Invalid unique bus name: {s}"),
120 Error::InvalidInterfaceName(s) => write!(f, "Invalid interface or error name: {s}"),
121 Error::InvalidErrorName(s) => write!(f, "Invalid interface or error name: {s}"),
122 Error::InvalidMemberName(s) => write!(f, "Invalid method or signal name: {s}"),
123 Error::InvalidPropertyName(s) => write!(f, "Invalid property name: {s}"),
124 Error::InvalidName(s) => write!(f, "{s}"),
125 Error::InvalidNameConversion { from, to } => {
126 write!(f, "Invalid conversion from `{from}` to `{to}`")
127 }
128 }
129 }
130}
131
132impl From<VariantError> for Error {
133 fn from(val: VariantError) -> Self {
134 Error::Variant(val)
135 }
136}
137
138impl From<Infallible> for Error {
139 fn from(i: Infallible) -> Self {
140 match i {}
141 }
142}
143
144pub type Result<T> = std::result::Result<T, Error>;