tokio_dbus/message/
message_kind.rs1use std::num::NonZeroU32;
2
3use crate::{message::OwnedMessageKind, ObjectPath};
4
5#[derive(Debug, Clone, Copy, PartialEq, Eq)]
7#[non_exhaustive]
8pub enum MessageKind<'a> {
9 MethodCall {
11 path: &'a ObjectPath,
13 member: &'a str,
15 },
16 MethodReturn {
18 reply_serial: NonZeroU32,
20 },
21 Error {
24 error_name: &'a str,
26 reply_serial: NonZeroU32,
28 },
29 Signal {
31 member: &'a str,
33 },
34}
35
36impl MessageKind<'_> {
37 #[inline]
38 pub(crate) fn to_owned(self) -> OwnedMessageKind {
39 match self {
40 MessageKind::MethodCall { path, member } => OwnedMessageKind::MethodCall {
41 path: path.into(),
42 member: member.into(),
43 },
44 MessageKind::MethodReturn { reply_serial } => {
45 OwnedMessageKind::MethodReturn { reply_serial }
46 }
47 MessageKind::Error {
48 error_name,
49 reply_serial,
50 } => OwnedMessageKind::Error {
51 error_name: error_name.into(),
52 reply_serial,
53 },
54 MessageKind::Signal { member } => OwnedMessageKind::Signal {
55 member: member.into(),
56 },
57 }
58 }
59}
60
61impl PartialEq<OwnedMessageKind> for MessageKind<'_> {
62 fn eq(&self, other: &OwnedMessageKind) -> bool {
63 match (*self, other) {
64 (
65 MessageKind::MethodCall {
66 path: path_left,
67 member: member_left,
68 },
69 OwnedMessageKind::MethodCall {
70 path: path_right,
71 member: member_right,
72 },
73 ) => *path_left == **path_right && *member_left == **member_right,
74 (
75 MessageKind::MethodReturn {
76 reply_serial: reply_serial_left,
77 },
78 OwnedMessageKind::MethodReturn {
79 reply_serial: reply_serial_right,
80 },
81 ) => reply_serial_left == *reply_serial_right,
82 (
83 MessageKind::Error {
84 error_name: error_name_left,
85 reply_serial: reply_serial_left,
86 },
87 OwnedMessageKind::Error {
88 error_name: error_name_right,
89 reply_serial: reply_serial_right,
90 },
91 ) => *error_name_left == **error_name_right && reply_serial_left == *reply_serial_right,
92 (
93 MessageKind::Signal {
94 member: member_left,
95 },
96 OwnedMessageKind::Signal {
97 member: member_right,
98 },
99 ) => *member_left == **member_right,
100 _ => false,
101 }
102 }
103}