zbus_names/
error.rs
1use static_assertions::assert_impl_all;
2use std::{convert::Infallible, error, fmt};
3use zvariant::Error as VariantError;
4
5#[derive(Clone, Debug)]
9#[allow(clippy::upper_case_acronyms)]
10#[non_exhaustive]
11pub enum Error {
12 Variant(VariantError),
13 InvalidBusName(String, String),
16 InvalidWellKnownName(String),
18 InvalidUniqueName(String),
20 InvalidInterfaceName(String),
22 InvalidMemberName(String),
24 InvalidErrorName(String),
26}
27
28assert_impl_all!(Error: Send, Sync, Unpin);
29
30impl PartialEq for Error {
31 fn eq(&self, other: &Self) -> bool {
32 match (self, other) {
33 (Self::InvalidBusName(_, _), Self::InvalidBusName(_, _)) => true,
34 (Self::InvalidWellKnownName(_), Self::InvalidWellKnownName(_)) => true,
35 (Self::InvalidUniqueName(_), Self::InvalidUniqueName(_)) => true,
36 (Self::InvalidInterfaceName(_), Self::InvalidInterfaceName(_)) => true,
37 (Self::InvalidMemberName(_), Self::InvalidMemberName(_)) => true,
38 (Self::InvalidErrorName(_), Self::InvalidErrorName(_)) => true,
39 (Self::Variant(s), Self::Variant(o)) => s == o,
40 (_, _) => false,
41 }
42 }
43}
44
45impl error::Error for Error {
46 fn source(&self) -> Option<&(dyn error::Error + 'static)> {
47 match self {
48 Error::InvalidBusName(_, _) => None,
49 Error::InvalidWellKnownName(_) => None,
50 Error::InvalidUniqueName(_) => None,
51 Error::InvalidInterfaceName(_) => None,
52 Error::InvalidErrorName(_) => None,
53 Error::InvalidMemberName(_) => None,
54 Error::Variant(e) => Some(e),
55 }
56 }
57}
58
59impl fmt::Display for Error {
60 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
61 match self {
62 Error::Variant(e) => write!(f, "{e}"),
63 Error::InvalidBusName(unique_err, well_known_err) => {
64 write!(
65 f,
66 "Neither a valid unique ({unique_err}) nor a well-known ({well_known_err}) bus name"
67 )
68 }
69 Error::InvalidWellKnownName(s) => write!(f, "Invalid well-known bus name: {s}"),
70 Error::InvalidUniqueName(s) => write!(f, "Invalid unique bus name: {s}"),
71 Error::InvalidInterfaceName(s) => write!(f, "Invalid interface or error name: {s}"),
72 Error::InvalidErrorName(s) => write!(f, "Invalid interface or error name: {s}"),
73 Error::InvalidMemberName(s) => write!(f, "Invalid method or signal name: {s}"),
74 }
75 }
76}
77
78impl From<VariantError> for Error {
79 fn from(val: VariantError) -> Self {
80 Error::Variant(val)
81 }
82}
83
84impl From<Infallible> for Error {
85 fn from(i: Infallible) -> Self {
86 match i {}
87 }
88}
89
90pub type Result<T> = std::result::Result<T, Error>;