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