atspi_common/events/
cache.rs

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/// Type that contains the `zbus::Message` for meta information and
20/// the [`crate::cache::LegacyCacheItem`]
21#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
22pub struct LegacyAddAccessibleEvent {
23	/// The [`ObjectRef`] the event applies to.
24	pub item: ObjectRefOwned,
25	/// A cache item to add to the internal cache.
26	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/// Type that contains the `zbus::Message` for meta information and
64/// the [`crate::cache::CacheItem`]
65#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
66pub struct AddAccessibleEvent {
67	/// The [`ObjectRef`] the event applies to.
68	pub item: ObjectRefOwned,
69	/// A cache item to add to the internal cache.
70	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/// `Cache::RemoveAccessible` signal event type.
110#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
111pub struct RemoveAccessibleEvent {
112	/// The application that emitted the signal TODO Check Me
113	/// The [`ObjectRef`] the event applies to.
114	pub item: ObjectRefOwned,
115	/// The node that was removed from the application tree  TODO Check Me
116	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);