atspi_common/events/
cache.rs

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