1use crate::cache::{CacheItem, LegacyCacheItem};
2#[cfg(feature = "zbus")]
3use crate::error::AtspiError;
4#[cfg(feature = "zbus")]
5use crate::object_ref::ObjectRef;
6#[cfg(feature = "zbus")]
7use crate::EventProperties;
8use crate::{
9 events::{DBusInterface, DBusMatchRule, DBusMember, RegistryEventString},
10 object_ref::ObjectRefOwned,
11};
12use serde::{Deserialize, Serialize};
13#[cfg(feature = "zbus")]
14use zbus::message::{Body as DbusBody, Header};
15
16#[cfg(feature = "zbus")]
17use super::{MessageConversion, MessageConversionExt};
18
19#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
22pub struct LegacyAddAccessibleEvent {
23 pub item: ObjectRefOwned,
25 pub node_added: LegacyCacheItem,
27}
28
29impl_event_type_properties_for_event!(LegacyAddAccessibleEvent);
30
31event_test_cases!(LegacyAddAccessibleEvent, Explicit);
32impl_from_dbus_message!(LegacyAddAccessibleEvent, Explicit);
33impl_event_properties!(LegacyAddAccessibleEvent);
34impl_to_dbus_message!(LegacyAddAccessibleEvent);
35
36impl_member_interface_registry_string_and_match_rule_for_event!(
37 LegacyAddAccessibleEvent,
38 "AddAccessible",
39 "org.a11y.atspi.Cache",
40 "cache:add",
41 "type='signal',interface='org.a11y.atspi.Cache',member='AddAccessible'"
42);
43
44#[cfg(feature = "zbus")]
45impl MessageConversion<'_> for LegacyAddAccessibleEvent {
46 type Body<'msg> = LegacyCacheItem;
47
48 fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
49 Ok(Self { item: item.into(), node_added: body.deserialize_unchecked::<Self::Body<'_>>()? })
50 }
51
52 fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
53 let item = header.try_into()?;
54 let body = msg.body();
55 Self::from_message_unchecked_parts(item, body)
56 }
57
58 fn body(&self) -> Self::Body<'_> {
59 self.node_added.clone()
60 }
61}
62
63#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
66pub struct AddAccessibleEvent {
67 pub item: ObjectRefOwned,
69 pub node_added: CacheItem,
71}
72
73impl_event_type_properties_for_event!(AddAccessibleEvent);
74
75event_test_cases!(AddAccessibleEvent, Explicit);
76
77impl_member_interface_registry_string_and_match_rule_for_event!(
78 AddAccessibleEvent,
79 "AddAccessible",
80 "org.a11y.atspi.Cache",
81 "cache:add",
82 "type='signal',interface='org.a11y.atspi.Cache',member='AddAccessible'"
83);
84
85#[cfg(feature = "zbus")]
86impl MessageConversion<'_> for AddAccessibleEvent {
87 type Body<'msg> = CacheItem;
88
89 fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
90 Ok(Self { item: item.into(), node_added: body.deserialize_unchecked::<Self::Body<'_>>()? })
91 }
92
93 fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
94 let item = header.try_into()?;
95 let body = msg.body();
96 Self::from_message_unchecked_parts(item, body)
97 }
98
99 fn body(&self) -> Self::Body<'_> {
100 self.node_added.clone()
101 }
102}
103
104impl_msg_conversion_ext_for_target_type_with_specified_body_type!(target: AddAccessibleEvent, body: CacheItem);
105impl_from_dbus_message!(AddAccessibleEvent, Explicit);
106impl_event_properties!(AddAccessibleEvent);
107impl_to_dbus_message!(AddAccessibleEvent);
108
109#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
111pub struct RemoveAccessibleEvent {
112 pub item: ObjectRefOwned,
115 pub node_removed: ObjectRefOwned,
117}
118
119impl_event_type_properties_for_event!(RemoveAccessibleEvent);
120
121event_test_cases!(RemoveAccessibleEvent, Explicit);
122
123impl_member_interface_registry_string_and_match_rule_for_event!(
124 RemoveAccessibleEvent,
125 "RemoveAccessible",
126 "org.a11y.atspi.Cache",
127 "cache:remove",
128 "type='signal',interface='org.a11y.atspi.Cache',member='RemoveAccessible'"
129);
130
131#[cfg(feature = "zbus")]
132impl MessageConversion<'_> for RemoveAccessibleEvent {
133 type Body<'msg> = ObjectRefOwned;
134
135 fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
136 Ok(Self {
137 item: item.into(),
138 node_removed: body.deserialize_unchecked::<Self::Body<'_>>()?,
139 })
140 }
141
142 fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
143 let item = header.try_into()?;
144 let body = msg.body();
145 Self::from_message_unchecked_parts(item, body)
146 }
147
148 fn body(&self) -> Self::Body<'_> {
149 self.node_removed.clone()
150 }
151}
152
153#[cfg(feature = "zbus")]
154impl MessageConversionExt<'_, LegacyCacheItem> for LegacyAddAccessibleEvent {
155 fn try_from_message(msg: &zbus::Message, hdr: &Header) -> Result<Self, AtspiError> {
156 <LegacyAddAccessibleEvent as MessageConversionExt<crate::LegacyCacheItem>>::validate_interface(hdr)?;
157 <LegacyAddAccessibleEvent as MessageConversionExt<crate::LegacyCacheItem>>::validate_member(hdr)?;
158 <LegacyAddAccessibleEvent as MessageConversionExt<crate::LegacyCacheItem>>::validate_body(
159 msg,
160 )?;
161 <LegacyAddAccessibleEvent as MessageConversion>::from_message_unchecked(msg, hdr)
162 }
163}
164
165impl_msg_conversion_ext_for_target_type_with_specified_body_type!(target: RemoveAccessibleEvent, body: ObjectRefOwned);
166impl_from_dbus_message!(RemoveAccessibleEvent, Explicit);
167impl_event_properties!(RemoveAccessibleEvent);
168impl_to_dbus_message!(RemoveAccessibleEvent);