atspi_common/events/
event_wrappers.rs

1use crate::events::registry::socket::AvailableEvent;
2
3use crate::events::registry::{EventListenerDeregisteredEvent, EventListenerRegisteredEvent};
4#[cfg(feature = "zbus")]
5use crate::events::traits::{EventWrapperMessageConversion, TryFromMessage};
6#[cfg(feature = "zbus")]
7use crate::events::MessageConversion;
8use crate::CacheItem;
9use crate::{
10	error::AtspiError,
11	events::{
12		cache::{AddAccessibleEvent, LegacyAddAccessibleEvent, RemoveAccessibleEvent},
13		document::{
14			AttributesChangedEvent as DocumentAttributesChangedEvent, ContentChangedEvent,
15			LoadCompleteEvent, LoadStoppedEvent, PageChangedEvent, ReloadEvent,
16		},
17		focus::FocusEvent,
18		keyboard::ModifiersEvent,
19		mouse::{AbsEvent, ButtonEvent, RelEvent},
20		object::{
21			ActiveDescendantChangedEvent, AnnouncementEvent,
22			AttributesChangedEvent as ObjectAttributesChangedEvent, BoundsChangedEvent,
23			ChildrenChangedEvent, ColumnDeletedEvent, ColumnInsertedEvent, ColumnReorderedEvent,
24			LinkSelectedEvent, ModelChangedEvent, PropertyChangeEvent as ObjectPropertyChangeEvent,
25			RowDeletedEvent, RowInsertedEvent, RowReorderedEvent, SelectionChangedEvent,
26			StateChangedEvent, TextAttributesChangedEvent, TextBoundsChangedEvent,
27			TextCaretMovedEvent, TextChangedEvent, TextSelectionChangedEvent,
28			VisibleDataChangedEvent,
29		},
30		terminal::{
31			ApplicationChangedEvent, CharWidthChangedEvent, ColumnCountChangedEvent,
32			LineChangedEvent, LineCountChangedEvent,
33		},
34		window::{
35			ActivateEvent, CloseEvent, CreateEvent, DeactivateEvent, DesktopCreateEvent,
36			DesktopDestroyEvent, DestroyEvent, LowerEvent, MaximizeEvent, MinimizeEvent, MoveEvent,
37			PropertyChangeEvent as WindowPropertyChangeEvent, RaiseEvent, ReparentEvent,
38			ResizeEvent, RestoreEvent, RestyleEvent, ShadeEvent, UUshadeEvent,
39		},
40		DBusInterface, DBusMatchRule, DBusMember, EventTypeProperties, RegistryEventString,
41	},
42	EventProperties, LegacyCacheItem,
43};
44use serde::{Deserialize, Serialize};
45#[cfg(feature = "zbus")]
46use zbus::message::Header;
47use zbus_names::UniqueName;
48use zvariant::{ObjectPath, Type};
49
50impl_from_user_facing_event_for_interface_event_enum!(
51	EventListenerRegisteredEvent,
52	EventListenerEvents,
53	EventListenerEvents::Registered
54);
55
56impl_from_user_facing_type_for_event_enum!(EventListenerRegisteredEvent, Event::Listener);
57
58impl_try_from_event_for_user_facing_type!(
59	EventListenerRegisteredEvent,
60	EventListenerEvents::Registered,
61	Event::Listener
62);
63
64impl_from_user_facing_event_for_interface_event_enum!(
65	EventListenerDeregisteredEvent,
66	EventListenerEvents,
67	EventListenerEvents::Deregistered
68);
69
70impl_from_user_facing_type_for_event_enum!(EventListenerDeregisteredEvent, Event::Listener);
71impl_try_from_event_for_user_facing_type!(
72	EventListenerDeregisteredEvent,
73	EventListenerEvents::Deregistered,
74	Event::Listener
75);
76
77#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
78pub enum KeyboardEvents {
79	/// See: [`ModifiersEvent`].
80	Modifiers(ModifiersEvent),
81}
82
83impl_tryfrommessage_for_event_wrapper!(KeyboardEvents);
84impl_try_from_event_for_interface_enum!(KeyboardEvents, Event::Keyboard);
85impl_from_interface_event_enum_for_event!(KeyboardEvents, Event::Keyboard);
86
87impl_from_user_facing_event_for_interface_event_enum!(
88	ModifiersEvent,
89	KeyboardEvents,
90	KeyboardEvents::Modifiers
91);
92impl EventTypeProperties for KeyboardEvents {
93	fn member(&self) -> &'static str {
94		match self {
95			Self::Modifiers(inner) => inner.member(),
96		}
97	}
98	fn match_rule(&self) -> &'static str {
99		match self {
100			Self::Modifiers(inner) => inner.match_rule(),
101		}
102	}
103	fn interface(&self) -> &'static str {
104		match self {
105			Self::Modifiers(inner) => inner.interface(),
106		}
107	}
108	fn registry_string(&self) -> &'static str {
109		match self {
110			Self::Modifiers(inner) => inner.registry_string(),
111		}
112	}
113}
114
115impl EventProperties for KeyboardEvents {
116	fn path(&self) -> ObjectPath<'_> {
117		match self {
118			Self::Modifiers(inner) => inner.path(),
119		}
120	}
121	fn sender(&self) -> UniqueName<'_> {
122		match self {
123			Self::Modifiers(inner) => inner.sender(),
124		}
125	}
126}
127
128event_wrapper_test_cases!(KeyboardEvents, ModifiersEvent);
129
130impl DBusMatchRule for KeyboardEvents {
131	const MATCH_RULE_STRING: &'static str =
132		"type='signal',interface='org.a11y.atspi.Event.Keyboard'";
133}
134
135impl DBusInterface for KeyboardEvents {
136	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Keyboard";
137}
138
139impl RegistryEventString for KeyboardEvents {
140	const REGISTRY_EVENT_STRING: &'static str = "keyboard:";
141}
142
143impl_from_user_facing_type_for_event_enum!(ModifiersEvent, Event::Keyboard);
144
145#[cfg(feature = "zbus")]
146impl TryFrom<&zbus::Message> for KeyboardEvents {
147	type Error = AtspiError;
148	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
149		Self::try_from_message(msg)
150	}
151}
152
153impl_try_from_event_for_user_facing_type!(
154	ModifiersEvent,
155	KeyboardEvents::Modifiers,
156	Event::Keyboard
157);
158
159#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
160pub enum MouseEvents {
161	/// See: [`AbsEvent`].
162	Abs(AbsEvent),
163
164	/// See: [`RelEvent`].
165	Rel(RelEvent),
166
167	/// See: [`ButtonEvent`].
168	Button(ButtonEvent),
169}
170
171impl DBusMatchRule for MouseEvents {
172	const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Mouse'";
173}
174
175impl DBusInterface for MouseEvents {
176	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Mouse";
177}
178
179impl RegistryEventString for MouseEvents {
180	const REGISTRY_EVENT_STRING: &'static str = "mouse:";
181}
182
183impl_tryfrommessage_for_event_wrapper!(MouseEvents);
184
185#[cfg(feature = "zbus")]
186impl EventWrapperMessageConversion for KeyboardEvents {
187	fn try_from_message_interface_checked(
188		msg: &zbus::Message,
189		hdr: &Header,
190	) -> Result<Self, AtspiError> {
191		let member = hdr
192			.member()
193			.ok_or(AtspiError::MemberMatch("Event without member".into()))?;
194		match member.as_str() {
195			ModifiersEvent::DBUS_MEMBER => {
196				Ok(KeyboardEvents::Modifiers(ModifiersEvent::from_message_unchecked(msg, hdr)?))
197			}
198			_ => Err(AtspiError::MemberMatch("No matching member for Keyboard".into())),
199		}
200	}
201}
202
203impl EventProperties for MouseEvents {
204	fn path(&self) -> ObjectPath<'_> {
205		match self {
206			Self::Abs(inner) => inner.path(),
207			Self::Rel(inner) => inner.path(),
208			Self::Button(inner) => inner.path(),
209		}
210	}
211	fn sender(&self) -> UniqueName<'_> {
212		match self {
213			Self::Abs(inner) => inner.sender(),
214			Self::Rel(inner) => inner.sender(),
215			Self::Button(inner) => inner.sender(),
216		}
217	}
218}
219
220impl EventTypeProperties for MouseEvents {
221	fn member(&self) -> &'static str {
222		match self {
223			Self::Abs(inner) => inner.member(),
224			Self::Rel(inner) => inner.member(),
225			Self::Button(inner) => inner.member(),
226		}
227	}
228	fn interface(&self) -> &'static str {
229		match self {
230			Self::Abs(inner) => inner.interface(),
231			Self::Rel(inner) => inner.interface(),
232			Self::Button(inner) => inner.interface(),
233		}
234	}
235	fn match_rule(&self) -> &'static str {
236		match self {
237			Self::Abs(inner) => inner.match_rule(),
238			Self::Rel(inner) => inner.match_rule(),
239			Self::Button(inner) => inner.match_rule(),
240		}
241	}
242	fn registry_string(&self) -> &'static str {
243		match self {
244			Self::Abs(inner) => inner.registry_string(),
245			Self::Rel(inner) => inner.registry_string(),
246			Self::Button(inner) => inner.registry_string(),
247		}
248	}
249}
250
251event_wrapper_test_cases!(MouseEvents, AbsEvent);
252impl_try_from_event_for_interface_enum!(MouseEvents, Event::Mouse);
253impl_from_interface_event_enum_for_event!(MouseEvents, Event::Mouse);
254
255impl_from_user_facing_event_for_interface_event_enum!(RelEvent, MouseEvents, MouseEvents::Rel);
256impl_try_from_event_for_user_facing_type!(RelEvent, MouseEvents::Rel, Event::Mouse);
257impl_from_user_facing_event_for_interface_event_enum!(
258	ButtonEvent,
259	MouseEvents,
260	MouseEvents::Button
261);
262impl_try_from_event_for_user_facing_type!(ButtonEvent, MouseEvents::Button, Event::Mouse);
263
264#[cfg(feature = "zbus")]
265impl EventWrapperMessageConversion for MouseEvents {
266	fn try_from_message_interface_checked(
267		msg: &zbus::Message,
268		hdr: &Header,
269	) -> Result<Self, AtspiError> {
270		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
271		match member.as_str() {
272			AbsEvent::DBUS_MEMBER => {
273				Ok(MouseEvents::Abs(AbsEvent::from_message_unchecked(msg, hdr)?))
274			}
275			RelEvent::DBUS_MEMBER => {
276				Ok(MouseEvents::Rel(RelEvent::from_message_unchecked(msg, hdr)?))
277			}
278			ButtonEvent::DBUS_MEMBER => {
279				Ok(MouseEvents::Button(ButtonEvent::from_message_unchecked(msg, hdr)?))
280			}
281			_ => Err(AtspiError::MemberMatch("No matching member for Mouse".into())),
282		}
283	}
284}
285
286#[cfg(feature = "zbus")]
287impl TryFrom<&zbus::Message> for MouseEvents {
288	type Error = AtspiError;
289	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
290		Self::try_from_message(msg)
291	}
292}
293
294impl_from_user_facing_type_for_event_enum!(ButtonEvent, Event::Mouse);
295impl_from_user_facing_type_for_event_enum!(RelEvent, Event::Mouse);
296impl_from_user_facing_type_for_event_enum!(AbsEvent, Event::Mouse);
297
298impl_from_user_facing_event_for_interface_event_enum!(AbsEvent, MouseEvents, MouseEvents::Abs);
299impl_try_from_event_for_user_facing_type!(AbsEvent, MouseEvents::Abs, Event::Mouse);
300
301#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
302pub enum ObjectEvents {
303	/// See: [`ObjectPropertyChangeEvent`].
304	PropertyChange(ObjectPropertyChangeEvent),
305	/// See: [`BoundsChangedEvent`].
306	BoundsChanged(BoundsChangedEvent),
307	/// See: [`LinkSelectedEvent`].
308	LinkSelected(LinkSelectedEvent),
309	/// See: [`StateChangedEvent`].
310	StateChanged(StateChangedEvent),
311	/// See: [`ChildrenChangedEvent`].
312	ChildrenChanged(ChildrenChangedEvent),
313	/// See: [`VisibleDataChangedEvent`].
314	VisibleDataChanged(VisibleDataChangedEvent),
315	/// See: [`SelectionChangedEvent`].
316	SelectionChanged(SelectionChangedEvent),
317	/// See: [`ModelChangedEvent`].
318	ModelChanged(ModelChangedEvent),
319	/// See: [`ActiveDescendantChangedEvent`].
320	ActiveDescendantChanged(ActiveDescendantChangedEvent),
321	/// See: [`AnnouncementEvent`].
322	Announcement(AnnouncementEvent),
323	/// See: [`ObjectAttributesChangedEvent`].
324	AttributesChanged(ObjectAttributesChangedEvent),
325	/// See: [`RowInsertedEvent`].
326	RowInserted(RowInsertedEvent),
327	/// See: [`RowReorderedEvent`].
328	RowReordered(RowReorderedEvent),
329	/// See: [`RowDeletedEvent`].
330	RowDeleted(RowDeletedEvent),
331	/// See: [`ColumnInsertedEvent`].
332	ColumnInserted(ColumnInsertedEvent),
333	/// See: [`ColumnReorderedEvent`].
334	ColumnReordered(ColumnReorderedEvent),
335	/// See: [`ColumnDeletedEvent`].
336	ColumnDeleted(ColumnDeletedEvent),
337	/// See: [`TextBoundsChangedEvent`].
338	TextBoundsChanged(TextBoundsChangedEvent),
339	/// See: [`TextSelectionChangedEvent`].
340	TextSelectionChanged(TextSelectionChangedEvent),
341	/// See: [`TextChangedEvent`].
342	TextChanged(TextChangedEvent),
343	/// See: [`TextAttributesChangedEvent`].
344	TextAttributesChanged(TextAttributesChangedEvent),
345	/// See: [`TextCaretMovedEvent`].
346	TextCaretMoved(TextCaretMovedEvent),
347}
348
349impl_tryfrommessage_for_event_wrapper!(ObjectEvents);
350
351impl EventTypeProperties for ObjectEvents {
352	fn member(&self) -> &'static str {
353		match self {
354			Self::PropertyChange(inner) => inner.member(),
355			Self::BoundsChanged(inner) => inner.member(),
356			Self::LinkSelected(inner) => inner.member(),
357			Self::StateChanged(inner) => inner.member(),
358			Self::ChildrenChanged(inner) => inner.member(),
359			Self::VisibleDataChanged(inner) => inner.member(),
360			Self::SelectionChanged(inner) => inner.member(),
361			Self::ModelChanged(inner) => inner.member(),
362			Self::ActiveDescendantChanged(inner) => inner.member(),
363			Self::Announcement(inner) => inner.member(),
364			Self::AttributesChanged(inner) => inner.member(),
365			Self::RowInserted(inner) => inner.member(),
366			Self::RowReordered(inner) => inner.member(),
367			Self::RowDeleted(inner) => inner.member(),
368			Self::ColumnInserted(inner) => inner.member(),
369			Self::ColumnReordered(inner) => inner.member(),
370			Self::ColumnDeleted(inner) => inner.member(),
371			Self::TextBoundsChanged(inner) => inner.member(),
372			Self::TextSelectionChanged(inner) => inner.member(),
373			Self::TextChanged(inner) => inner.member(),
374			Self::TextAttributesChanged(inner) => inner.member(),
375			Self::TextCaretMoved(inner) => inner.member(),
376		}
377	}
378	fn interface(&self) -> &'static str {
379		match self {
380			Self::PropertyChange(inner) => inner.interface(),
381			Self::BoundsChanged(inner) => inner.interface(),
382			Self::LinkSelected(inner) => inner.interface(),
383			Self::StateChanged(inner) => inner.interface(),
384			Self::ChildrenChanged(inner) => inner.interface(),
385			Self::VisibleDataChanged(inner) => inner.interface(),
386			Self::SelectionChanged(inner) => inner.interface(),
387			Self::ModelChanged(inner) => inner.interface(),
388			Self::ActiveDescendantChanged(inner) => inner.interface(),
389			Self::Announcement(inner) => inner.interface(),
390			Self::AttributesChanged(inner) => inner.interface(),
391			Self::RowInserted(inner) => inner.interface(),
392			Self::RowReordered(inner) => inner.interface(),
393			Self::RowDeleted(inner) => inner.interface(),
394			Self::ColumnInserted(inner) => inner.interface(),
395			Self::ColumnReordered(inner) => inner.interface(),
396			Self::ColumnDeleted(inner) => inner.interface(),
397			Self::TextBoundsChanged(inner) => inner.interface(),
398			Self::TextSelectionChanged(inner) => inner.interface(),
399			Self::TextChanged(inner) => inner.interface(),
400			Self::TextAttributesChanged(inner) => inner.interface(),
401			Self::TextCaretMoved(inner) => inner.interface(),
402		}
403	}
404	fn match_rule(&self) -> &'static str {
405		match self {
406			Self::PropertyChange(inner) => inner.match_rule(),
407			Self::BoundsChanged(inner) => inner.match_rule(),
408			Self::LinkSelected(inner) => inner.match_rule(),
409			Self::StateChanged(inner) => inner.match_rule(),
410			Self::ChildrenChanged(inner) => inner.match_rule(),
411			Self::VisibleDataChanged(inner) => inner.match_rule(),
412			Self::SelectionChanged(inner) => inner.match_rule(),
413			Self::ModelChanged(inner) => inner.match_rule(),
414			Self::ActiveDescendantChanged(inner) => inner.match_rule(),
415			Self::Announcement(inner) => inner.match_rule(),
416			Self::AttributesChanged(inner) => inner.match_rule(),
417			Self::RowInserted(inner) => inner.match_rule(),
418			Self::RowReordered(inner) => inner.match_rule(),
419			Self::RowDeleted(inner) => inner.match_rule(),
420			Self::ColumnInserted(inner) => inner.match_rule(),
421			Self::ColumnReordered(inner) => inner.match_rule(),
422			Self::ColumnDeleted(inner) => inner.match_rule(),
423			Self::TextBoundsChanged(inner) => inner.match_rule(),
424			Self::TextSelectionChanged(inner) => inner.match_rule(),
425			Self::TextChanged(inner) => inner.match_rule(),
426			Self::TextAttributesChanged(inner) => inner.match_rule(),
427			Self::TextCaretMoved(inner) => inner.match_rule(),
428		}
429	}
430	fn registry_string(&self) -> &'static str {
431		match self {
432			Self::PropertyChange(inner) => inner.registry_string(),
433			Self::BoundsChanged(inner) => inner.registry_string(),
434			Self::LinkSelected(inner) => inner.registry_string(),
435			Self::StateChanged(inner) => inner.registry_string(),
436			Self::ChildrenChanged(inner) => inner.registry_string(),
437			Self::VisibleDataChanged(inner) => inner.registry_string(),
438			Self::SelectionChanged(inner) => inner.registry_string(),
439			Self::ModelChanged(inner) => inner.registry_string(),
440			Self::ActiveDescendantChanged(inner) => inner.registry_string(),
441			Self::Announcement(inner) => inner.registry_string(),
442			Self::AttributesChanged(inner) => inner.registry_string(),
443			Self::RowInserted(inner) => inner.registry_string(),
444			Self::RowReordered(inner) => inner.registry_string(),
445			Self::RowDeleted(inner) => inner.registry_string(),
446			Self::ColumnInserted(inner) => inner.registry_string(),
447			Self::ColumnReordered(inner) => inner.registry_string(),
448			Self::ColumnDeleted(inner) => inner.registry_string(),
449			Self::TextBoundsChanged(inner) => inner.registry_string(),
450			Self::TextSelectionChanged(inner) => inner.registry_string(),
451			Self::TextChanged(inner) => inner.registry_string(),
452			Self::TextAttributesChanged(inner) => inner.registry_string(),
453			Self::TextCaretMoved(inner) => inner.registry_string(),
454		}
455	}
456}
457
458impl EventProperties for ObjectEvents {
459	fn path(&self) -> ObjectPath<'_> {
460		match self {
461			Self::PropertyChange(inner) => inner.path(),
462			Self::BoundsChanged(inner) => inner.path(),
463			Self::LinkSelected(inner) => inner.path(),
464			Self::StateChanged(inner) => inner.path(),
465			Self::ChildrenChanged(inner) => inner.path(),
466			Self::VisibleDataChanged(inner) => inner.path(),
467			Self::SelectionChanged(inner) => inner.path(),
468			Self::ModelChanged(inner) => inner.path(),
469			Self::ActiveDescendantChanged(inner) => inner.path(),
470			Self::Announcement(inner) => inner.path(),
471			Self::AttributesChanged(inner) => inner.path(),
472			Self::RowInserted(inner) => inner.path(),
473			Self::RowReordered(inner) => inner.path(),
474			Self::RowDeleted(inner) => inner.path(),
475			Self::ColumnInserted(inner) => inner.path(),
476			Self::ColumnReordered(inner) => inner.path(),
477			Self::ColumnDeleted(inner) => inner.path(),
478			Self::TextBoundsChanged(inner) => inner.path(),
479			Self::TextSelectionChanged(inner) => inner.path(),
480			Self::TextChanged(inner) => inner.path(),
481			Self::TextAttributesChanged(inner) => inner.path(),
482			Self::TextCaretMoved(inner) => inner.path(),
483		}
484	}
485	fn sender(&self) -> UniqueName<'_> {
486		match self {
487			Self::PropertyChange(inner) => inner.sender(),
488			Self::BoundsChanged(inner) => inner.sender(),
489			Self::LinkSelected(inner) => inner.sender(),
490			Self::StateChanged(inner) => inner.sender(),
491			Self::ChildrenChanged(inner) => inner.sender(),
492			Self::VisibleDataChanged(inner) => inner.sender(),
493			Self::SelectionChanged(inner) => inner.sender(),
494			Self::ModelChanged(inner) => inner.sender(),
495			Self::ActiveDescendantChanged(inner) => inner.sender(),
496			Self::Announcement(inner) => inner.sender(),
497			Self::AttributesChanged(inner) => inner.sender(),
498			Self::RowInserted(inner) => inner.sender(),
499			Self::RowReordered(inner) => inner.sender(),
500			Self::RowDeleted(inner) => inner.sender(),
501			Self::ColumnInserted(inner) => inner.sender(),
502			Self::ColumnReordered(inner) => inner.sender(),
503			Self::ColumnDeleted(inner) => inner.sender(),
504			Self::TextBoundsChanged(inner) => inner.sender(),
505			Self::TextSelectionChanged(inner) => inner.sender(),
506			Self::TextChanged(inner) => inner.sender(),
507			Self::TextAttributesChanged(inner) => inner.sender(),
508			Self::TextCaretMoved(inner) => inner.sender(),
509		}
510	}
511}
512
513impl_try_from_event_for_interface_enum!(ObjectEvents, Event::Object);
514impl_from_interface_event_enum_for_event!(ObjectEvents, Event::Object);
515
516event_wrapper_test_cases!(ObjectEvents, ObjectPropertyChangeEvent);
517
518impl_from_user_facing_event_for_interface_event_enum!(
519	TextChangedEvent,
520	ObjectEvents,
521	ObjectEvents::TextChanged
522);
523impl_try_from_event_for_user_facing_type!(
524	TextChangedEvent,
525	ObjectEvents::TextChanged,
526	Event::Object
527);
528
529#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
530pub enum DocumentEvents {
531	/// See: [`LoadCompleteEvent`].
532	LoadComplete(LoadCompleteEvent),
533	/// See: [`ReloadEvent`].
534	Reload(ReloadEvent),
535	/// See: [`LoadStoppedEvent`].
536	LoadStopped(LoadStoppedEvent),
537	/// See: [`ContentChangedEvent`].
538	ContentChanged(ContentChangedEvent),
539	/// See: [`DocumentAttributesChangedEvent`].
540	AttributesChanged(DocumentAttributesChangedEvent),
541	/// See: [`PageChangedEvent`].
542	PageChanged(PageChangedEvent),
543}
544
545impl_tryfrommessage_for_event_wrapper!(DocumentEvents);
546
547impl DBusInterface for DocumentEvents {
548	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Document";
549}
550
551impl DBusMatchRule for DocumentEvents {
552	const MATCH_RULE_STRING: &'static str =
553		"type='signal',interface='org.a11y.atspi.Event.Document'";
554}
555
556impl RegistryEventString for DocumentEvents {
557	const REGISTRY_EVENT_STRING: &'static str = "Document:";
558}
559
560impl EventTypeProperties for DocumentEvents {
561	fn member(&self) -> &'static str {
562		match self {
563			Self::LoadComplete(inner) => inner.member(),
564			Self::Reload(inner) => inner.member(),
565			Self::LoadStopped(inner) => inner.member(),
566			Self::ContentChanged(inner) => inner.member(),
567			Self::AttributesChanged(inner) => inner.member(),
568			Self::PageChanged(inner) => inner.member(),
569		}
570	}
571	fn interface(&self) -> &'static str {
572		match self {
573			Self::LoadComplete(inner) => inner.interface(),
574			Self::Reload(inner) => inner.interface(),
575			Self::LoadStopped(inner) => inner.interface(),
576			Self::ContentChanged(inner) => inner.interface(),
577			Self::AttributesChanged(inner) => inner.interface(),
578			Self::PageChanged(inner) => inner.interface(),
579		}
580	}
581	fn match_rule(&self) -> &'static str {
582		match self {
583			Self::LoadComplete(inner) => inner.match_rule(),
584			Self::Reload(inner) => inner.match_rule(),
585			Self::LoadStopped(inner) => inner.match_rule(),
586			Self::ContentChanged(inner) => inner.match_rule(),
587			Self::AttributesChanged(inner) => inner.match_rule(),
588			Self::PageChanged(inner) => inner.match_rule(),
589		}
590	}
591	fn registry_string(&self) -> &'static str {
592		match self {
593			Self::LoadComplete(inner) => inner.registry_string(),
594			Self::Reload(inner) => inner.registry_string(),
595			Self::LoadStopped(inner) => inner.registry_string(),
596			Self::ContentChanged(inner) => inner.registry_string(),
597			Self::AttributesChanged(inner) => inner.registry_string(),
598			Self::PageChanged(inner) => inner.registry_string(),
599		}
600	}
601}
602
603impl EventProperties for DocumentEvents {
604	fn path(&self) -> ObjectPath<'_> {
605		match self {
606			Self::LoadComplete(inner) => inner.path(),
607			Self::Reload(inner) => inner.path(),
608			Self::LoadStopped(inner) => inner.path(),
609			Self::ContentChanged(inner) => inner.path(),
610			Self::AttributesChanged(inner) => inner.path(),
611			Self::PageChanged(inner) => inner.path(),
612		}
613	}
614	fn sender(&self) -> UniqueName<'_> {
615		match self {
616			Self::LoadComplete(inner) => inner.sender(),
617			Self::Reload(inner) => inner.sender(),
618			Self::LoadStopped(inner) => inner.sender(),
619			Self::ContentChanged(inner) => inner.sender(),
620			Self::AttributesChanged(inner) => inner.sender(),
621			Self::PageChanged(inner) => inner.sender(),
622		}
623	}
624}
625
626impl_from_user_facing_type_for_event_enum!(PageChangedEvent, Event::Document);
627impl_from_user_facing_type_for_event_enum!(DocumentAttributesChangedEvent, Event::Document);
628impl_from_user_facing_type_for_event_enum!(ContentChangedEvent, Event::Document);
629impl_from_user_facing_type_for_event_enum!(LoadStoppedEvent, Event::Document);
630impl_from_user_facing_type_for_event_enum!(ReloadEvent, Event::Document);
631impl_from_user_facing_type_for_event_enum!(LoadCompleteEvent, Event::Document);
632
633impl_try_from_event_for_interface_enum!(DocumentEvents, Event::Document);
634impl_from_interface_event_enum_for_event!(DocumentEvents, Event::Document);
635
636event_wrapper_test_cases!(DocumentEvents, LoadCompleteEvent);
637
638#[cfg(feature = "zbus")]
639impl EventWrapperMessageConversion for DocumentEvents {
640	fn try_from_message_interface_checked(
641		msg: &zbus::Message,
642		hdr: &Header,
643	) -> Result<Self, AtspiError> {
644		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
645		match member.as_str() {
646			LoadCompleteEvent::DBUS_MEMBER => Ok(DocumentEvents::LoadComplete(
647				LoadCompleteEvent::from_message_unchecked(msg, hdr)?,
648			)),
649			ReloadEvent::DBUS_MEMBER => {
650				Ok(DocumentEvents::Reload(ReloadEvent::from_message_unchecked(msg, hdr)?))
651			}
652			LoadStoppedEvent::DBUS_MEMBER => {
653				Ok(DocumentEvents::LoadStopped(LoadStoppedEvent::from_message_unchecked(msg, hdr)?))
654			}
655			ContentChangedEvent::DBUS_MEMBER => Ok(DocumentEvents::ContentChanged(
656				ContentChangedEvent::from_message_unchecked(msg, hdr)?,
657			)),
658			DocumentAttributesChangedEvent::DBUS_MEMBER => Ok(DocumentEvents::AttributesChanged(
659				DocumentAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
660			)),
661			PageChangedEvent::DBUS_MEMBER => {
662				Ok(DocumentEvents::PageChanged(PageChangedEvent::from_message_unchecked(msg, hdr)?))
663			}
664			_ => Err(AtspiError::MemberMatch("No matching member for Document".into())),
665		}
666	}
667}
668
669#[cfg(feature = "zbus")]
670impl TryFrom<&zbus::Message> for DocumentEvents {
671	type Error = AtspiError;
672	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
673		Self::try_from_message(msg)
674	}
675}
676
677impl_from_user_facing_event_for_interface_event_enum!(
678	LoadCompleteEvent,
679	DocumentEvents,
680	DocumentEvents::LoadComplete
681);
682impl_try_from_event_for_user_facing_type!(
683	LoadCompleteEvent,
684	DocumentEvents::LoadComplete,
685	Event::Document
686);
687
688impl_from_user_facing_event_for_interface_event_enum!(
689	ReloadEvent,
690	DocumentEvents,
691	DocumentEvents::Reload
692);
693impl_try_from_event_for_user_facing_type!(ReloadEvent, DocumentEvents::Reload, Event::Document);
694
695impl_from_user_facing_event_for_interface_event_enum!(
696	LoadStoppedEvent,
697	DocumentEvents,
698	DocumentEvents::LoadStopped
699);
700impl_try_from_event_for_user_facing_type!(
701	LoadStoppedEvent,
702	DocumentEvents::LoadStopped,
703	Event::Document
704);
705
706impl_from_user_facing_event_for_interface_event_enum!(
707	ContentChangedEvent,
708	DocumentEvents,
709	DocumentEvents::ContentChanged
710);
711impl_try_from_event_for_user_facing_type!(
712	ContentChangedEvent,
713	DocumentEvents::ContentChanged,
714	Event::Document
715);
716
717impl_from_user_facing_event_for_interface_event_enum!(
718	DocumentAttributesChangedEvent,
719	DocumentEvents,
720	DocumentEvents::AttributesChanged
721);
722impl_try_from_event_for_user_facing_type!(
723	DocumentAttributesChangedEvent,
724	DocumentEvents::AttributesChanged,
725	Event::Document
726);
727
728impl_from_user_facing_event_for_interface_event_enum!(
729	PageChangedEvent,
730	DocumentEvents,
731	DocumentEvents::PageChanged
732);
733impl_try_from_event_for_user_facing_type!(
734	PageChangedEvent,
735	DocumentEvents::PageChanged,
736	Event::Document
737);
738
739/// Encapsulates the various different accessibility bus signal types.
740///
741/// Assumes being non exhaustive to allow for future- or custom signals.
742#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
743#[non_exhaustive]
744pub enum Event {
745	/// See: [`DocumentEvents`].
746	Document(DocumentEvents),
747	/// See: [`FocusEvents`].
748	Focus(FocusEvents),
749	/// See: [`KeyboardEvents`].
750	Keyboard(KeyboardEvents),
751	/// See: [`MouseEvents`].
752	Mouse(MouseEvents),
753	/// See: [`ObjectEvents`].
754	Object(ObjectEvents),
755	/// See: [`TerminalEvents`].
756	Terminal(TerminalEvents),
757	/// See: [`WindowEvents`].
758	Window(WindowEvents),
759	/// See: [`AvailableEvent`].
760	Available(AvailableEvent),
761	/// See: [`CacheEvents`].
762	Cache(CacheEvents),
763	/// See: [`EventListenerEvents`].
764	Listener(EventListenerEvents),
765}
766
767impl EventTypeProperties for Event {
768	fn member(&self) -> &'static str {
769		match self {
770			Self::Document(inner) => inner.member(),
771			Self::Focus(inner) => inner.member(),
772			Self::Keyboard(inner) => inner.member(),
773			Self::Mouse(inner) => inner.member(),
774			Self::Object(inner) => inner.member(),
775			Self::Terminal(inner) => inner.member(),
776			Self::Window(inner) => inner.member(),
777			Self::Available(inner) => inner.member(),
778			Self::Cache(inner) => inner.member(),
779			Self::Listener(inner) => inner.member(),
780		}
781	}
782	fn interface(&self) -> &'static str {
783		match self {
784			Self::Document(inner) => inner.interface(),
785			Self::Focus(inner) => inner.interface(),
786			Self::Keyboard(inner) => inner.interface(),
787			Self::Mouse(inner) => inner.interface(),
788			Self::Object(inner) => inner.interface(),
789			Self::Terminal(inner) => inner.interface(),
790			Self::Window(inner) => inner.interface(),
791			Self::Available(inner) => inner.interface(),
792			Self::Cache(inner) => inner.interface(),
793			Self::Listener(inner) => inner.interface(),
794		}
795	}
796	fn match_rule(&self) -> &'static str {
797		match self {
798			Self::Document(inner) => inner.match_rule(),
799			Self::Focus(inner) => inner.match_rule(),
800			Self::Keyboard(inner) => inner.match_rule(),
801			Self::Mouse(inner) => inner.match_rule(),
802			Self::Object(inner) => inner.match_rule(),
803			Self::Terminal(inner) => inner.match_rule(),
804			Self::Window(inner) => inner.match_rule(),
805			Self::Available(inner) => inner.match_rule(),
806			Self::Cache(inner) => inner.match_rule(),
807			Self::Listener(inner) => inner.match_rule(),
808		}
809	}
810	fn registry_string(&self) -> &'static str {
811		match self {
812			Self::Document(inner) => inner.registry_string(),
813			Self::Focus(inner) => inner.registry_string(),
814			Self::Keyboard(inner) => inner.registry_string(),
815			Self::Mouse(inner) => inner.registry_string(),
816			Self::Object(inner) => inner.registry_string(),
817			Self::Terminal(inner) => inner.registry_string(),
818			Self::Window(inner) => inner.registry_string(),
819			Self::Available(inner) => inner.registry_string(),
820			Self::Cache(inner) => inner.registry_string(),
821			Self::Listener(inner) => inner.registry_string(),
822		}
823	}
824}
825
826impl EventProperties for Event {
827	fn path(&self) -> ObjectPath<'_> {
828		match self {
829			Self::Document(inner) => inner.path(),
830			Self::Focus(inner) => inner.path(),
831			Self::Keyboard(inner) => inner.path(),
832			Self::Mouse(inner) => inner.path(),
833			Self::Object(inner) => inner.path(),
834			Self::Terminal(inner) => inner.path(),
835			Self::Window(inner) => inner.path(),
836			Self::Available(inner) => inner.path(),
837			Self::Cache(inner) => inner.path(),
838			Self::Listener(inner) => inner.path(),
839		}
840	}
841	fn sender(&self) -> UniqueName<'_> {
842		match self {
843			Self::Document(inner) => inner.sender(),
844			Self::Focus(inner) => inner.sender(),
845			Self::Keyboard(inner) => inner.sender(),
846			Self::Mouse(inner) => inner.sender(),
847			Self::Object(inner) => inner.sender(),
848			Self::Terminal(inner) => inner.sender(),
849			Self::Window(inner) => inner.sender(),
850			Self::Available(inner) => inner.sender(),
851			Self::Cache(inner) => inner.sender(),
852			Self::Listener(inner) => inner.sender(),
853		}
854	}
855}
856
857#[cfg(feature = "zbus")]
858impl TryFrom<&zbus::Message> for Event {
859	type Error = AtspiError;
860
861	fn try_from(msg: &zbus::Message) -> Result<Event, AtspiError> {
862		let header = msg.header();
863		let interface = header.interface().ok_or(AtspiError::MissingInterface)?;
864		let interface_str = interface.as_str();
865
866		match interface_str {
867			<ObjectEvents as DBusInterface>::DBUS_INTERFACE => {
868				Ok(Event::Object(ObjectEvents::try_from_message_interface_checked(msg, &header)?))
869			}
870			<FocusEvents as DBusInterface>::DBUS_INTERFACE => {
871				Ok(Event::Focus(FocusEvents::try_from_message_interface_checked(msg, &header)?))
872			}
873			<CacheEvents as DBusInterface>::DBUS_INTERFACE => {
874				Ok(Event::Cache(CacheEvents::try_from_message_interface_checked(msg, &header)?))
875			}
876			<WindowEvents as DBusInterface>::DBUS_INTERFACE => {
877				Ok(Event::Window(WindowEvents::try_from_message_interface_checked(msg, &header)?))
878			}
879			<MouseEvents as DBusInterface>::DBUS_INTERFACE => {
880				Ok(Event::Mouse(MouseEvents::try_from_message_interface_checked(msg, &header)?))
881			}
882			<TerminalEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Terminal(
883				TerminalEvents::try_from_message_interface_checked(msg, &header)?,
884			)),
885			<DocumentEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Document(
886				DocumentEvents::try_from_message_interface_checked(msg, &header)?,
887			)),
888			<KeyboardEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Keyboard(
889				KeyboardEvents::try_from_message_interface_checked(msg, &header)?,
890			)),
891			<EventListenerEvents as DBusInterface>::DBUS_INTERFACE => Ok(Event::Listener(
892				EventListenerEvents::try_from_message_interface_checked(msg, &header)?,
893			)),
894			<AvailableEvent as DBusInterface>::DBUS_INTERFACE => {
895				Ok(AvailableEvent::try_from(msg)?.into())
896			}
897			_ => Err(AtspiError::InterfaceMatch(format!(
898				"No events found with interface {interface_str}"
899			))),
900		}
901	}
902}
903
904impl_from_user_facing_type_for_event_enum!(TextCaretMovedEvent, Event::Object);
905impl_from_user_facing_type_for_event_enum!(TextAttributesChangedEvent, Event::Object);
906impl_from_user_facing_type_for_event_enum!(TextChangedEvent, Event::Object);
907impl_from_user_facing_type_for_event_enum!(TextSelectionChangedEvent, Event::Object);
908impl_from_user_facing_type_for_event_enum!(TextBoundsChangedEvent, Event::Object);
909impl_from_user_facing_type_for_event_enum!(ColumnDeletedEvent, Event::Object);
910impl_from_user_facing_type_for_event_enum!(ColumnReorderedEvent, Event::Object);
911impl_from_user_facing_type_for_event_enum!(ColumnInsertedEvent, Event::Object);
912impl_from_user_facing_type_for_event_enum!(RowDeletedEvent, Event::Object);
913impl_from_user_facing_type_for_event_enum!(RowReorderedEvent, Event::Object);
914impl_from_user_facing_type_for_event_enum!(RowInsertedEvent, Event::Object);
915impl_from_user_facing_type_for_event_enum!(ObjectAttributesChangedEvent, Event::Object);
916impl_from_user_facing_type_for_event_enum!(AnnouncementEvent, Event::Object);
917impl_from_user_facing_type_for_event_enum!(ActiveDescendantChangedEvent, Event::Object);
918impl_from_user_facing_type_for_event_enum!(ModelChangedEvent, Event::Object);
919impl_from_user_facing_type_for_event_enum!(SelectionChangedEvent, Event::Object);
920impl_from_user_facing_type_for_event_enum!(VisibleDataChangedEvent, Event::Object);
921impl_from_user_facing_type_for_event_enum!(ChildrenChangedEvent, Event::Object);
922impl_from_user_facing_type_for_event_enum!(StateChangedEvent, Event::Object);
923impl_from_user_facing_type_for_event_enum!(LinkSelectedEvent, Event::Object);
924impl_from_user_facing_type_for_event_enum!(BoundsChangedEvent, Event::Object);
925impl_from_user_facing_type_for_event_enum!(ObjectPropertyChangeEvent, Event::Object);
926
927impl_from_user_facing_event_for_interface_event_enum!(
928	ObjectPropertyChangeEvent,
929	ObjectEvents,
930	ObjectEvents::PropertyChange
931);
932impl_try_from_event_for_user_facing_type!(
933	ObjectPropertyChangeEvent,
934	ObjectEvents::PropertyChange,
935	Event::Object
936);
937impl_from_user_facing_event_for_interface_event_enum!(
938	BoundsChangedEvent,
939	ObjectEvents,
940	ObjectEvents::BoundsChanged
941);
942impl_try_from_event_for_user_facing_type!(
943	BoundsChangedEvent,
944	ObjectEvents::BoundsChanged,
945	Event::Object
946);
947impl_from_user_facing_event_for_interface_event_enum!(
948	LinkSelectedEvent,
949	ObjectEvents,
950	ObjectEvents::LinkSelected
951);
952impl_try_from_event_for_user_facing_type!(
953	LinkSelectedEvent,
954	ObjectEvents::LinkSelected,
955	Event::Object
956);
957impl_from_user_facing_event_for_interface_event_enum!(
958	StateChangedEvent,
959	ObjectEvents,
960	ObjectEvents::StateChanged
961);
962impl_try_from_event_for_user_facing_type!(
963	StateChangedEvent,
964	ObjectEvents::StateChanged,
965	Event::Object
966);
967impl_from_user_facing_event_for_interface_event_enum!(
968	ChildrenChangedEvent,
969	ObjectEvents,
970	ObjectEvents::ChildrenChanged
971);
972impl_try_from_event_for_user_facing_type!(
973	ChildrenChangedEvent,
974	ObjectEvents::ChildrenChanged,
975	Event::Object
976);
977impl_from_user_facing_event_for_interface_event_enum!(
978	VisibleDataChangedEvent,
979	ObjectEvents,
980	ObjectEvents::VisibleDataChanged
981);
982impl_try_from_event_for_user_facing_type!(
983	VisibleDataChangedEvent,
984	ObjectEvents::VisibleDataChanged,
985	Event::Object
986);
987impl_from_user_facing_event_for_interface_event_enum!(
988	SelectionChangedEvent,
989	ObjectEvents,
990	ObjectEvents::SelectionChanged
991);
992impl_try_from_event_for_user_facing_type!(
993	SelectionChangedEvent,
994	ObjectEvents::SelectionChanged,
995	Event::Object
996);
997impl_from_user_facing_event_for_interface_event_enum!(
998	ModelChangedEvent,
999	ObjectEvents,
1000	ObjectEvents::ModelChanged
1001);
1002impl_try_from_event_for_user_facing_type!(
1003	ModelChangedEvent,
1004	ObjectEvents::ModelChanged,
1005	Event::Object
1006);
1007impl_from_user_facing_event_for_interface_event_enum!(
1008	ActiveDescendantChangedEvent,
1009	ObjectEvents,
1010	ObjectEvents::ActiveDescendantChanged
1011);
1012impl_try_from_event_for_user_facing_type!(
1013	ActiveDescendantChangedEvent,
1014	ObjectEvents::ActiveDescendantChanged,
1015	Event::Object
1016);
1017impl_from_user_facing_event_for_interface_event_enum!(
1018	AnnouncementEvent,
1019	ObjectEvents,
1020	ObjectEvents::Announcement
1021);
1022impl_try_from_event_for_user_facing_type!(
1023	AnnouncementEvent,
1024	ObjectEvents::Announcement,
1025	Event::Object
1026);
1027impl_from_user_facing_event_for_interface_event_enum!(
1028	ObjectAttributesChangedEvent,
1029	ObjectEvents,
1030	ObjectEvents::AttributesChanged
1031);
1032impl_try_from_event_for_user_facing_type!(
1033	ObjectAttributesChangedEvent,
1034	ObjectEvents::AttributesChanged,
1035	Event::Object
1036);
1037impl_from_user_facing_event_for_interface_event_enum!(
1038	RowInsertedEvent,
1039	ObjectEvents,
1040	ObjectEvents::RowInserted
1041);
1042impl_try_from_event_for_user_facing_type!(
1043	RowInsertedEvent,
1044	ObjectEvents::RowInserted,
1045	Event::Object
1046);
1047impl_from_user_facing_event_for_interface_event_enum!(
1048	RowReorderedEvent,
1049	ObjectEvents,
1050	ObjectEvents::RowReordered
1051);
1052impl_try_from_event_for_user_facing_type!(
1053	RowReorderedEvent,
1054	ObjectEvents::RowReordered,
1055	Event::Object
1056);
1057impl_from_user_facing_event_for_interface_event_enum!(
1058	RowDeletedEvent,
1059	ObjectEvents,
1060	ObjectEvents::RowDeleted
1061);
1062impl_try_from_event_for_user_facing_type!(RowDeletedEvent, ObjectEvents::RowDeleted, Event::Object);
1063impl_from_user_facing_event_for_interface_event_enum!(
1064	ColumnInsertedEvent,
1065	ObjectEvents,
1066	ObjectEvents::ColumnInserted
1067);
1068impl_try_from_event_for_user_facing_type!(
1069	ColumnInsertedEvent,
1070	ObjectEvents::ColumnInserted,
1071	Event::Object
1072);
1073impl_from_user_facing_event_for_interface_event_enum!(
1074	ColumnReorderedEvent,
1075	ObjectEvents,
1076	ObjectEvents::ColumnReordered
1077);
1078impl_try_from_event_for_user_facing_type!(
1079	ColumnReorderedEvent,
1080	ObjectEvents::ColumnReordered,
1081	Event::Object
1082);
1083impl_from_user_facing_event_for_interface_event_enum!(
1084	ColumnDeletedEvent,
1085	ObjectEvents,
1086	ObjectEvents::ColumnDeleted
1087);
1088impl_try_from_event_for_user_facing_type!(
1089	ColumnDeletedEvent,
1090	ObjectEvents::ColumnDeleted,
1091	Event::Object
1092);
1093impl_from_user_facing_event_for_interface_event_enum!(
1094	TextBoundsChangedEvent,
1095	ObjectEvents,
1096	ObjectEvents::TextBoundsChanged
1097);
1098impl_try_from_event_for_user_facing_type!(
1099	TextBoundsChangedEvent,
1100	ObjectEvents::TextBoundsChanged,
1101	Event::Object
1102);
1103impl_from_user_facing_event_for_interface_event_enum!(
1104	TextSelectionChangedEvent,
1105	ObjectEvents,
1106	ObjectEvents::TextSelectionChanged
1107);
1108impl_try_from_event_for_user_facing_type!(
1109	TextSelectionChangedEvent,
1110	ObjectEvents::TextSelectionChanged,
1111	Event::Object
1112);
1113impl_from_user_facing_event_for_interface_event_enum!(
1114	TextAttributesChangedEvent,
1115	ObjectEvents,
1116	ObjectEvents::TextAttributesChanged
1117);
1118impl_try_from_event_for_user_facing_type!(
1119	TextAttributesChangedEvent,
1120	ObjectEvents::TextAttributesChanged,
1121	Event::Object
1122);
1123impl_from_user_facing_event_for_interface_event_enum!(
1124	TextCaretMovedEvent,
1125	ObjectEvents,
1126	ObjectEvents::TextCaretMoved
1127);
1128impl_try_from_event_for_user_facing_type!(
1129	TextCaretMovedEvent,
1130	ObjectEvents::TextCaretMoved,
1131	Event::Object
1132);
1133
1134impl DBusMatchRule for ObjectEvents {
1135	const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Object'";
1136}
1137
1138impl DBusInterface for ObjectEvents {
1139	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Object";
1140}
1141
1142impl RegistryEventString for ObjectEvents {
1143	const REGISTRY_EVENT_STRING: &'static str = "object:";
1144}
1145
1146#[cfg(feature = "zbus")]
1147impl EventWrapperMessageConversion for ObjectEvents {
1148	fn try_from_message_interface_checked(
1149		msg: &zbus::Message,
1150		hdr: &Header,
1151	) -> Result<Self, AtspiError> {
1152		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1153		match member.as_str() {
1154			ObjectPropertyChangeEvent::DBUS_MEMBER => Ok(ObjectEvents::PropertyChange(
1155				ObjectPropertyChangeEvent::from_message_unchecked(msg, hdr)?,
1156			)),
1157			BoundsChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::BoundsChanged(
1158				BoundsChangedEvent::from_message_unchecked(msg, hdr)?,
1159			)),
1160			LinkSelectedEvent::DBUS_MEMBER => {
1161				Ok(ObjectEvents::LinkSelected(LinkSelectedEvent::from_message_unchecked(msg, hdr)?))
1162			}
1163			StateChangedEvent::DBUS_MEMBER => {
1164				Ok(ObjectEvents::StateChanged(StateChangedEvent::from_message_unchecked(msg, hdr)?))
1165			}
1166			ChildrenChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::ChildrenChanged(
1167				ChildrenChangedEvent::from_message_unchecked(msg, hdr)?,
1168			)),
1169			VisibleDataChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::VisibleDataChanged(
1170				VisibleDataChangedEvent::from_message_unchecked(msg, hdr)?,
1171			)),
1172			SelectionChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::SelectionChanged(
1173				SelectionChangedEvent::from_message_unchecked(msg, hdr)?,
1174			)),
1175			ModelChangedEvent::DBUS_MEMBER => {
1176				Ok(ObjectEvents::ModelChanged(ModelChangedEvent::from_message_unchecked(msg, hdr)?))
1177			}
1178			ActiveDescendantChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::ActiveDescendantChanged(
1179				ActiveDescendantChangedEvent::from_message_unchecked(msg, hdr)?,
1180			)),
1181			AnnouncementEvent::DBUS_MEMBER => {
1182				Ok(ObjectEvents::Announcement(AnnouncementEvent::from_message_unchecked(msg, hdr)?))
1183			}
1184			ObjectAttributesChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::AttributesChanged(
1185				ObjectAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
1186			)),
1187			RowInsertedEvent::DBUS_MEMBER => {
1188				Ok(ObjectEvents::RowInserted(RowInsertedEvent::from_message_unchecked(msg, hdr)?))
1189			}
1190			RowReorderedEvent::DBUS_MEMBER => {
1191				Ok(ObjectEvents::RowReordered(RowReorderedEvent::from_message_unchecked(msg, hdr)?))
1192			}
1193			RowDeletedEvent::DBUS_MEMBER => {
1194				Ok(ObjectEvents::RowDeleted(RowDeletedEvent::from_message_unchecked(msg, hdr)?))
1195			}
1196			ColumnInsertedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnInserted(
1197				ColumnInsertedEvent::from_message_unchecked(msg, hdr)?,
1198			)),
1199			ColumnReorderedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnReordered(
1200				ColumnReorderedEvent::from_message_unchecked(msg, hdr)?,
1201			)),
1202			ColumnDeletedEvent::DBUS_MEMBER => Ok(ObjectEvents::ColumnDeleted(
1203				ColumnDeletedEvent::from_message_unchecked(msg, hdr)?,
1204			)),
1205			TextBoundsChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextBoundsChanged(
1206				TextBoundsChangedEvent::from_message_unchecked(msg, hdr)?,
1207			)),
1208			TextSelectionChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextSelectionChanged(
1209				TextSelectionChangedEvent::from_message_unchecked(msg, hdr)?,
1210			)),
1211			TextChangedEvent::DBUS_MEMBER => {
1212				Ok(ObjectEvents::TextChanged(TextChangedEvent::from_message_unchecked(msg, hdr)?))
1213			}
1214			TextAttributesChangedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextAttributesChanged(
1215				TextAttributesChangedEvent::from_message_unchecked(msg, hdr)?,
1216			)),
1217			TextCaretMovedEvent::DBUS_MEMBER => Ok(ObjectEvents::TextCaretMoved(
1218				TextCaretMovedEvent::from_message_unchecked(msg, hdr)?,
1219			)),
1220			_ => Err(AtspiError::MemberMatch(format!(
1221				"No matching member {member} for interface {}",
1222				Self::DBUS_INTERFACE,
1223			))),
1224		}
1225	}
1226}
1227
1228#[cfg(feature = "zbus")]
1229impl TryFrom<&zbus::Message> for ObjectEvents {
1230	type Error = AtspiError;
1231	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1232		Self::try_from_message(msg)
1233	}
1234}
1235
1236/// All events related to the `org.a11y.atspi.Cache` interface.
1237/// Note that these are not telling the client that an item *has been added* to a cache.
1238/// It is telling the client "here is a bunch of information to store it in your cache".
1239#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Eq, Hash)]
1240#[allow(clippy::module_name_repetitions)]
1241pub enum CacheEvents {
1242	/// See: [`AddAccessibleEvent`].
1243	Add(AddAccessibleEvent),
1244	/// See: [`LegacyAddAccessibleEvent`].
1245	LegacyAdd(LegacyAddAccessibleEvent),
1246	/// See: [`RemoveAccessibleEvent`].
1247	Remove(RemoveAccessibleEvent),
1248}
1249
1250impl_from_user_facing_type_for_event_enum!(RemoveAccessibleEvent, Event::Cache);
1251impl_from_user_facing_type_for_event_enum!(AddAccessibleEvent, Event::Cache);
1252impl_from_user_facing_type_for_event_enum!(LegacyAddAccessibleEvent, Event::Cache);
1253
1254impl DBusMatchRule for CacheEvents {
1255	const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Cache'";
1256}
1257
1258impl RegistryEventString for CacheEvents {
1259	const REGISTRY_EVENT_STRING: &'static str = "Cache";
1260}
1261
1262impl DBusInterface for CacheEvents {
1263	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Cache";
1264}
1265
1266impl EventTypeProperties for CacheEvents {
1267	fn member(&self) -> &'static str {
1268		match self {
1269			Self::Add(inner) => inner.member(),
1270			Self::LegacyAdd(inner) => inner.member(),
1271			Self::Remove(inner) => inner.member(),
1272		}
1273	}
1274	fn interface(&self) -> &'static str {
1275		match self {
1276			Self::Add(inner) => inner.interface(),
1277			Self::LegacyAdd(inner) => inner.interface(),
1278			Self::Remove(inner) => inner.interface(),
1279		}
1280	}
1281	fn match_rule(&self) -> &'static str {
1282		match self {
1283			Self::Add(inner) => inner.match_rule(),
1284			Self::LegacyAdd(inner) => inner.match_rule(),
1285			Self::Remove(inner) => inner.match_rule(),
1286		}
1287	}
1288	fn registry_string(&self) -> &'static str {
1289		match self {
1290			Self::Add(inner) => inner.registry_string(),
1291			Self::LegacyAdd(inner) => inner.registry_string(),
1292			Self::Remove(inner) => inner.registry_string(),
1293		}
1294	}
1295}
1296
1297impl EventProperties for CacheEvents {
1298	fn path(&self) -> ObjectPath<'_> {
1299		match self {
1300			Self::Add(inner) => inner.path(),
1301			Self::LegacyAdd(inner) => inner.path(),
1302			Self::Remove(inner) => inner.path(),
1303		}
1304	}
1305	fn sender(&self) -> UniqueName<'_> {
1306		match self {
1307			Self::Add(inner) => inner.sender(),
1308			Self::LegacyAdd(inner) => inner.sender(),
1309			Self::Remove(inner) => inner.sender(),
1310		}
1311	}
1312}
1313
1314#[cfg(feature = "zbus")]
1315impl EventWrapperMessageConversion for CacheEvents {
1316	fn try_from_message_interface_checked(
1317		msg: &zbus::Message,
1318		hdr: &Header,
1319	) -> Result<Self, AtspiError> {
1320		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1321		match member.as_str() {
1322			AddAccessibleEvent::DBUS_MEMBER => {
1323				let body = msg.body();
1324				let sig = body.signature();
1325				if sig == CacheItem::SIGNATURE {
1326					Ok(CacheEvents::Add(AddAccessibleEvent::from_message_unchecked(msg, hdr)?))
1327				} else if sig == LegacyCacheItem::SIGNATURE {
1328					Ok(CacheEvents::LegacyAdd(LegacyAddAccessibleEvent::from_message_unchecked(
1329						msg, hdr,
1330					)?))
1331				} else {
1332					Err(AtspiError::SignatureMatch(format!(
1333						"No matching event for signature {} in interface {}",
1334						&sig.to_string(),
1335						Self::DBUS_INTERFACE
1336					)))
1337				}
1338			}
1339			RemoveAccessibleEvent::DBUS_MEMBER => {
1340				Ok(CacheEvents::Remove(RemoveAccessibleEvent::from_message_unchecked(msg, hdr)?))
1341			}
1342			_ => Err(AtspiError::MemberMatch(format!(
1343				"No member {} in {}",
1344				member.as_str(),
1345				Self::DBUS_INTERFACE
1346			))),
1347		}
1348	}
1349}
1350
1351impl_tryfrommessage_for_event_wrapper!(CacheEvents);
1352
1353#[cfg(feature = "zbus")]
1354impl TryFrom<&zbus::Message> for CacheEvents {
1355	type Error = AtspiError;
1356	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1357		Self::try_from_message(msg)
1358	}
1359}
1360
1361impl_from_user_facing_event_for_interface_event_enum!(
1362	LegacyAddAccessibleEvent,
1363	CacheEvents,
1364	CacheEvents::LegacyAdd
1365);
1366impl_try_from_event_for_user_facing_type!(
1367	LegacyAddAccessibleEvent,
1368	CacheEvents::LegacyAdd,
1369	Event::Cache
1370);
1371impl_from_user_facing_event_for_interface_event_enum!(
1372	AddAccessibleEvent,
1373	CacheEvents,
1374	CacheEvents::Add
1375);
1376impl_try_from_event_for_user_facing_type!(AddAccessibleEvent, CacheEvents::Add, Event::Cache);
1377impl_from_user_facing_event_for_interface_event_enum!(
1378	RemoveAccessibleEvent,
1379	CacheEvents,
1380	CacheEvents::Remove
1381);
1382impl_try_from_event_for_user_facing_type!(RemoveAccessibleEvent, CacheEvents::Remove, Event::Cache);
1383impl_try_from_event_for_interface_enum!(CacheEvents, Event::Cache);
1384
1385#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1386pub enum FocusEvents {
1387	/// See: [`FocusEvent`].
1388	Focus(FocusEvent),
1389}
1390
1391impl_tryfrommessage_for_event_wrapper!(FocusEvents);
1392
1393#[cfg(feature = "zbus")]
1394impl TryFrom<&zbus::Message> for FocusEvents {
1395	type Error = AtspiError;
1396	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1397		Self::try_from_message(msg)
1398	}
1399}
1400
1401impl_from_interface_event_enum_for_event!(FocusEvents, Event::Focus);
1402impl_try_from_event_for_user_facing_type!(FocusEvent, FocusEvents::Focus, Event::Focus);
1403
1404impl EventTypeProperties for FocusEvents {
1405	fn member(&self) -> &'static str {
1406		match self {
1407			Self::Focus(inner) => inner.member(),
1408		}
1409	}
1410	fn match_rule(&self) -> &'static str {
1411		match self {
1412			Self::Focus(inner) => inner.match_rule(),
1413		}
1414	}
1415	fn interface(&self) -> &'static str {
1416		match self {
1417			Self::Focus(inner) => inner.interface(),
1418		}
1419	}
1420	fn registry_string(&self) -> &'static str {
1421		match self {
1422			Self::Focus(inner) => inner.registry_string(),
1423		}
1424	}
1425}
1426
1427impl EventProperties for FocusEvents {
1428	fn path(&self) -> ObjectPath<'_> {
1429		match self {
1430			Self::Focus(inner) => inner.path(),
1431		}
1432	}
1433	fn sender(&self) -> UniqueName<'_> {
1434		match self {
1435			Self::Focus(inner) => inner.sender(),
1436		}
1437	}
1438}
1439
1440impl_try_from_event_for_interface_enum!(FocusEvents, Event::Focus);
1441
1442impl_from_user_facing_event_for_interface_event_enum!(FocusEvent, FocusEvents, FocusEvents::Focus);
1443impl_from_user_facing_type_for_event_enum!(FocusEvent, Event::Focus);
1444event_wrapper_test_cases!(FocusEvents, FocusEvent);
1445
1446#[cfg(feature = "zbus")]
1447impl EventWrapperMessageConversion for FocusEvents {
1448	fn try_from_message_interface_checked(
1449		msg: &zbus::Message,
1450		hdr: &Header,
1451	) -> Result<Self, AtspiError> {
1452		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1453		match member.as_str() {
1454			FocusEvent::DBUS_MEMBER => {
1455				Ok(FocusEvents::Focus(FocusEvent::from_message_unchecked(msg, hdr)?))
1456			}
1457			_ => Err(AtspiError::MemberMatch(format!(
1458				"No matching member {member} for interface {}",
1459				Self::DBUS_INTERFACE,
1460			))),
1461		}
1462	}
1463}
1464
1465impl DBusMatchRule for FocusEvents {
1466	const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Focus'";
1467}
1468
1469impl RegistryEventString for FocusEvents {
1470	const REGISTRY_EVENT_STRING: &'static str = "focus:";
1471}
1472
1473impl DBusInterface for FocusEvents {
1474	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Focus";
1475}
1476
1477/// All events related to the `org.a11y.atspi.Event.Terminal` interface.
1478#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1479pub enum TerminalEvents {
1480	/// See: [`LineChangedEvent`].
1481	LineChanged(LineChangedEvent),
1482	/// See: [`ColumnCountChangedEvent`].
1483	ColumnCountChanged(ColumnCountChangedEvent),
1484	/// See: [`LineCountChangedEvent`].
1485	LineCountChanged(LineCountChangedEvent),
1486	/// See: [`ApplicationChangedEvent`].
1487	ApplicationChanged(ApplicationChangedEvent),
1488	/// See: [`CharWidthChangedEvent`].
1489	CharWidthChanged(CharWidthChangedEvent),
1490}
1491
1492impl_tryfrommessage_for_event_wrapper!(TerminalEvents);
1493
1494impl EventTypeProperties for TerminalEvents {
1495	fn member(&self) -> &'static str {
1496		match self {
1497			Self::LineChanged(inner) => inner.member(),
1498			Self::ColumnCountChanged(inner) => inner.member(),
1499			Self::LineCountChanged(inner) => inner.member(),
1500			Self::ApplicationChanged(inner) => inner.member(),
1501			Self::CharWidthChanged(inner) => inner.member(),
1502		}
1503	}
1504	fn interface(&self) -> &'static str {
1505		match self {
1506			Self::LineChanged(inner) => inner.interface(),
1507			Self::ColumnCountChanged(inner) => inner.interface(),
1508			Self::LineCountChanged(inner) => inner.interface(),
1509			Self::ApplicationChanged(inner) => inner.interface(),
1510			Self::CharWidthChanged(inner) => inner.interface(),
1511		}
1512	}
1513	fn match_rule(&self) -> &'static str {
1514		match self {
1515			Self::LineChanged(inner) => inner.match_rule(),
1516			Self::ColumnCountChanged(inner) => inner.match_rule(),
1517			Self::LineCountChanged(inner) => inner.match_rule(),
1518			Self::ApplicationChanged(inner) => inner.match_rule(),
1519			Self::CharWidthChanged(inner) => inner.match_rule(),
1520		}
1521	}
1522	fn registry_string(&self) -> &'static str {
1523		match self {
1524			Self::LineChanged(inner) => inner.registry_string(),
1525			Self::ColumnCountChanged(inner) => inner.registry_string(),
1526			Self::LineCountChanged(inner) => inner.registry_string(),
1527			Self::ApplicationChanged(inner) => inner.registry_string(),
1528			Self::CharWidthChanged(inner) => inner.registry_string(),
1529		}
1530	}
1531}
1532
1533impl EventProperties for TerminalEvents {
1534	fn path(&self) -> ObjectPath<'_> {
1535		match self {
1536			Self::LineChanged(inner) => inner.path(),
1537			Self::ColumnCountChanged(inner) => inner.path(),
1538			Self::LineCountChanged(inner) => inner.path(),
1539			Self::ApplicationChanged(inner) => inner.path(),
1540			Self::CharWidthChanged(inner) => inner.path(),
1541		}
1542	}
1543	fn sender(&self) -> UniqueName<'_> {
1544		match self {
1545			Self::LineChanged(inner) => inner.sender(),
1546			Self::ColumnCountChanged(inner) => inner.sender(),
1547			Self::LineCountChanged(inner) => inner.sender(),
1548			Self::ApplicationChanged(inner) => inner.sender(),
1549			Self::CharWidthChanged(inner) => inner.sender(),
1550		}
1551	}
1552}
1553
1554impl_from_user_facing_type_for_event_enum!(CharWidthChangedEvent, Event::Terminal);
1555impl_from_user_facing_type_for_event_enum!(ApplicationChangedEvent, Event::Terminal);
1556impl_from_user_facing_type_for_event_enum!(LineCountChangedEvent, Event::Terminal);
1557impl_from_user_facing_type_for_event_enum!(ColumnCountChangedEvent, Event::Terminal);
1558impl_from_user_facing_type_for_event_enum!(LineChangedEvent, Event::Terminal);
1559
1560impl_try_from_event_for_interface_enum!(TerminalEvents, Event::Terminal);
1561impl_from_interface_event_enum_for_event!(TerminalEvents, Event::Terminal);
1562
1563event_wrapper_test_cases!(TerminalEvents, LineChangedEvent);
1564
1565impl DBusMatchRule for TerminalEvents {
1566	const MATCH_RULE_STRING: &'static str =
1567		"type='signal',interface='org.a11y.atspi.Event.Terminal'";
1568}
1569
1570impl RegistryEventString for TerminalEvents {
1571	const REGISTRY_EVENT_STRING: &'static str = "terminal:";
1572}
1573
1574impl DBusInterface for TerminalEvents {
1575	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Terminal";
1576}
1577
1578#[cfg(feature = "zbus")]
1579impl EventWrapperMessageConversion for TerminalEvents {
1580	fn try_from_message_interface_checked(
1581		msg: &zbus::Message,
1582		hdr: &Header,
1583	) -> Result<Self, AtspiError> {
1584		let member = hdr
1585			.member()
1586			.ok_or(AtspiError::MemberMatch("Event without member".into()))?;
1587		match member.as_str() {
1588			LineChangedEvent::DBUS_MEMBER => {
1589				Ok(TerminalEvents::LineChanged(LineChangedEvent::from_message_unchecked(msg, hdr)?))
1590			}
1591			ColumnCountChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::ColumnCountChanged(
1592				ColumnCountChangedEvent::from_message_unchecked(msg, hdr)?,
1593			)),
1594			LineCountChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::LineCountChanged(
1595				LineCountChangedEvent::from_message_unchecked(msg, hdr)?,
1596			)),
1597			ApplicationChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::ApplicationChanged(
1598				ApplicationChangedEvent::from_message_unchecked(msg, hdr)?,
1599			)),
1600			CharWidthChangedEvent::DBUS_MEMBER => Ok(TerminalEvents::CharWidthChanged(
1601				CharWidthChangedEvent::from_message_unchecked(msg, hdr)?,
1602			)),
1603			_ => Err(AtspiError::MemberMatch("No matching member for Terminal".into())),
1604		}
1605	}
1606}
1607
1608#[cfg(feature = "zbus")]
1609impl TryFrom<&zbus::Message> for TerminalEvents {
1610	type Error = AtspiError;
1611	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1612		Self::try_from_message(msg)
1613	}
1614}
1615
1616impl_from_user_facing_event_for_interface_event_enum!(
1617	LineChangedEvent,
1618	TerminalEvents,
1619	TerminalEvents::LineChanged
1620);
1621impl_try_from_event_for_user_facing_type!(
1622	LineChangedEvent,
1623	TerminalEvents::LineChanged,
1624	Event::Terminal
1625);
1626impl_from_user_facing_event_for_interface_event_enum!(
1627	ColumnCountChangedEvent,
1628	TerminalEvents,
1629	TerminalEvents::ColumnCountChanged
1630);
1631impl_try_from_event_for_user_facing_type!(
1632	ColumnCountChangedEvent,
1633	TerminalEvents::ColumnCountChanged,
1634	Event::Terminal
1635);
1636impl_from_user_facing_event_for_interface_event_enum!(
1637	LineCountChangedEvent,
1638	TerminalEvents,
1639	TerminalEvents::LineCountChanged
1640);
1641impl_try_from_event_for_user_facing_type!(
1642	LineCountChangedEvent,
1643	TerminalEvents::LineCountChanged,
1644	Event::Terminal
1645);
1646impl_from_user_facing_event_for_interface_event_enum!(
1647	ApplicationChangedEvent,
1648	TerminalEvents,
1649	TerminalEvents::ApplicationChanged
1650);
1651impl_try_from_event_for_user_facing_type!(
1652	ApplicationChangedEvent,
1653	TerminalEvents::ApplicationChanged,
1654	Event::Terminal
1655);
1656impl_from_user_facing_event_for_interface_event_enum!(
1657	CharWidthChangedEvent,
1658	TerminalEvents,
1659	TerminalEvents::CharWidthChanged
1660);
1661impl_try_from_event_for_user_facing_type!(
1662	CharWidthChangedEvent,
1663	TerminalEvents::CharWidthChanged,
1664	Event::Terminal
1665);
1666
1667/// All events on the `org.a11y.atspi.Event.Window` interface.
1668#[derive(Clone, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Hash)]
1669pub enum WindowEvents {
1670	/// See: [`WindowPropertyChangeEvent`].
1671	PropertyChange(WindowPropertyChangeEvent),
1672	/// See: [`MinimizeEvent`].
1673	Minimize(MinimizeEvent),
1674	/// See: [`MaximizeEvent`].
1675	Maximize(MaximizeEvent),
1676	/// See: [`RestoreEvent`].
1677	Restore(RestoreEvent),
1678	/// See: [`CloseEvent`].
1679	Close(CloseEvent),
1680	/// See: [`CreateEvent`].
1681	Create(CreateEvent),
1682	/// See: [`ReparentEvent`].
1683	Reparent(ReparentEvent),
1684	/// See: [`DesktopCreateEvent`].
1685	DesktopCreate(DesktopCreateEvent),
1686	/// See: [`DesktopDestroyEvent`].
1687	DesktopDestroy(DesktopDestroyEvent),
1688	/// See: [`DestroyEvent`].
1689	Destroy(DestroyEvent),
1690	/// See: [`ActivateEvent`].
1691	Activate(ActivateEvent),
1692	/// See: [`DeactivateEvent`].
1693	Deactivate(DeactivateEvent),
1694	/// See: [`RaiseEvent`].
1695	Raise(RaiseEvent),
1696	/// See: [`LowerEvent`].
1697	Lower(LowerEvent),
1698	/// See: [`MoveEvent`].
1699	Move(MoveEvent),
1700	/// See: [`ResizeEvent`].
1701	Resize(ResizeEvent),
1702	/// See: [`ShadeEvent`].
1703	Shade(ShadeEvent),
1704	/// See: [`UUshadeEvent`].
1705	UUshade(UUshadeEvent),
1706	/// See: [`RestyleEvent`].
1707	Restyle(RestyleEvent),
1708}
1709
1710impl_tryfrommessage_for_event_wrapper!(WindowEvents);
1711
1712impl EventTypeProperties for WindowEvents {
1713	fn member(&self) -> &'static str {
1714		match self {
1715			Self::PropertyChange(inner) => inner.member(),
1716			Self::Minimize(inner) => inner.member(),
1717			Self::Maximize(inner) => inner.member(),
1718			Self::Restore(inner) => inner.member(),
1719			Self::Close(inner) => inner.member(),
1720			Self::Create(inner) => inner.member(),
1721			Self::Reparent(inner) => inner.member(),
1722			Self::DesktopCreate(inner) => inner.member(),
1723			Self::DesktopDestroy(inner) => inner.member(),
1724			Self::Destroy(inner) => inner.member(),
1725			Self::Activate(inner) => inner.member(),
1726			Self::Deactivate(inner) => inner.member(),
1727			Self::Raise(inner) => inner.member(),
1728			Self::Lower(inner) => inner.member(),
1729			Self::Move(inner) => inner.member(),
1730			Self::Resize(inner) => inner.member(),
1731			Self::Shade(inner) => inner.member(),
1732			Self::UUshade(inner) => inner.member(),
1733			Self::Restyle(inner) => inner.member(),
1734		}
1735	}
1736	fn interface(&self) -> &'static str {
1737		match self {
1738			Self::PropertyChange(inner) => inner.interface(),
1739			Self::Minimize(inner) => inner.interface(),
1740			Self::Maximize(inner) => inner.interface(),
1741			Self::Restore(inner) => inner.interface(),
1742			Self::Close(inner) => inner.interface(),
1743			Self::Create(inner) => inner.interface(),
1744			Self::Reparent(inner) => inner.interface(),
1745			Self::DesktopCreate(inner) => inner.interface(),
1746			Self::DesktopDestroy(inner) => inner.interface(),
1747			Self::Destroy(inner) => inner.interface(),
1748			Self::Activate(inner) => inner.interface(),
1749			Self::Deactivate(inner) => inner.interface(),
1750			Self::Raise(inner) => inner.interface(),
1751			Self::Lower(inner) => inner.interface(),
1752			Self::Move(inner) => inner.interface(),
1753			Self::Resize(inner) => inner.interface(),
1754			Self::Shade(inner) => inner.interface(),
1755			Self::UUshade(inner) => inner.interface(),
1756			Self::Restyle(inner) => inner.interface(),
1757		}
1758	}
1759	fn match_rule(&self) -> &'static str {
1760		match self {
1761			Self::PropertyChange(inner) => inner.match_rule(),
1762			Self::Minimize(inner) => inner.match_rule(),
1763			Self::Maximize(inner) => inner.match_rule(),
1764			Self::Restore(inner) => inner.match_rule(),
1765			Self::Close(inner) => inner.match_rule(),
1766			Self::Create(inner) => inner.match_rule(),
1767			Self::Reparent(inner) => inner.match_rule(),
1768			Self::DesktopCreate(inner) => inner.match_rule(),
1769			Self::DesktopDestroy(inner) => inner.match_rule(),
1770			Self::Destroy(inner) => inner.match_rule(),
1771			Self::Activate(inner) => inner.match_rule(),
1772			Self::Deactivate(inner) => inner.match_rule(),
1773			Self::Raise(inner) => inner.match_rule(),
1774			Self::Lower(inner) => inner.match_rule(),
1775			Self::Move(inner) => inner.match_rule(),
1776			Self::Resize(inner) => inner.match_rule(),
1777			Self::Shade(inner) => inner.match_rule(),
1778			Self::UUshade(inner) => inner.match_rule(),
1779			Self::Restyle(inner) => inner.match_rule(),
1780		}
1781	}
1782	fn registry_string(&self) -> &'static str {
1783		match self {
1784			Self::PropertyChange(inner) => inner.registry_string(),
1785			Self::Minimize(inner) => inner.registry_string(),
1786			Self::Maximize(inner) => inner.registry_string(),
1787			Self::Restore(inner) => inner.registry_string(),
1788			Self::Close(inner) => inner.registry_string(),
1789			Self::Create(inner) => inner.registry_string(),
1790			Self::Reparent(inner) => inner.registry_string(),
1791			Self::DesktopCreate(inner) => inner.registry_string(),
1792			Self::DesktopDestroy(inner) => inner.registry_string(),
1793			Self::Destroy(inner) => inner.registry_string(),
1794			Self::Activate(inner) => inner.registry_string(),
1795			Self::Deactivate(inner) => inner.registry_string(),
1796			Self::Raise(inner) => inner.registry_string(),
1797			Self::Lower(inner) => inner.registry_string(),
1798			Self::Move(inner) => inner.registry_string(),
1799			Self::Resize(inner) => inner.registry_string(),
1800			Self::Shade(inner) => inner.registry_string(),
1801			Self::UUshade(inner) => inner.registry_string(),
1802			Self::Restyle(inner) => inner.registry_string(),
1803		}
1804	}
1805}
1806
1807impl EventProperties for WindowEvents {
1808	fn path(&self) -> ObjectPath<'_> {
1809		match self {
1810			Self::PropertyChange(inner) => inner.path(),
1811			Self::Minimize(inner) => inner.path(),
1812			Self::Maximize(inner) => inner.path(),
1813			Self::Restore(inner) => inner.path(),
1814			Self::Close(inner) => inner.path(),
1815			Self::Create(inner) => inner.path(),
1816			Self::Reparent(inner) => inner.path(),
1817			Self::DesktopCreate(inner) => inner.path(),
1818			Self::DesktopDestroy(inner) => inner.path(),
1819			Self::Destroy(inner) => inner.path(),
1820			Self::Activate(inner) => inner.path(),
1821			Self::Deactivate(inner) => inner.path(),
1822			Self::Raise(inner) => inner.path(),
1823			Self::Lower(inner) => inner.path(),
1824			Self::Move(inner) => inner.path(),
1825			Self::Resize(inner) => inner.path(),
1826			Self::Shade(inner) => inner.path(),
1827			Self::UUshade(inner) => inner.path(),
1828			Self::Restyle(inner) => inner.path(),
1829		}
1830	}
1831	fn sender(&self) -> UniqueName<'_> {
1832		match self {
1833			Self::PropertyChange(inner) => inner.sender(),
1834			Self::Minimize(inner) => inner.sender(),
1835			Self::Maximize(inner) => inner.sender(),
1836			Self::Restore(inner) => inner.sender(),
1837			Self::Close(inner) => inner.sender(),
1838			Self::Create(inner) => inner.sender(),
1839			Self::Reparent(inner) => inner.sender(),
1840			Self::DesktopCreate(inner) => inner.sender(),
1841			Self::DesktopDestroy(inner) => inner.sender(),
1842			Self::Destroy(inner) => inner.sender(),
1843			Self::Activate(inner) => inner.sender(),
1844			Self::Deactivate(inner) => inner.sender(),
1845			Self::Raise(inner) => inner.sender(),
1846			Self::Lower(inner) => inner.sender(),
1847			Self::Move(inner) => inner.sender(),
1848			Self::Resize(inner) => inner.sender(),
1849			Self::Shade(inner) => inner.sender(),
1850			Self::UUshade(inner) => inner.sender(),
1851			Self::Restyle(inner) => inner.sender(),
1852		}
1853	}
1854}
1855
1856impl_from_user_facing_type_for_event_enum!(ReparentEvent, Event::Window);
1857impl_from_user_facing_type_for_event_enum!(CloseEvent, Event::Window);
1858impl_from_user_facing_type_for_event_enum!(RestoreEvent, Event::Window);
1859impl_from_user_facing_type_for_event_enum!(MaximizeEvent, Event::Window);
1860impl_from_user_facing_type_for_event_enum!(MinimizeEvent, Event::Window);
1861impl_from_user_facing_type_for_event_enum!(WindowPropertyChangeEvent, Event::Window);
1862impl_from_user_facing_type_for_event_enum!(RestyleEvent, Event::Window);
1863impl_from_user_facing_type_for_event_enum!(UUshadeEvent, Event::Window);
1864impl_from_user_facing_type_for_event_enum!(ShadeEvent, Event::Window);
1865impl_from_user_facing_type_for_event_enum!(ResizeEvent, Event::Window);
1866impl_from_user_facing_type_for_event_enum!(MoveEvent, Event::Window);
1867impl_from_user_facing_type_for_event_enum!(LowerEvent, Event::Window);
1868impl_from_user_facing_type_for_event_enum!(RaiseEvent, Event::Window);
1869impl_from_user_facing_type_for_event_enum!(DeactivateEvent, Event::Window);
1870impl_from_user_facing_type_for_event_enum!(ActivateEvent, Event::Window);
1871impl_from_user_facing_type_for_event_enum!(DestroyEvent, Event::Window);
1872impl_from_user_facing_type_for_event_enum!(DesktopDestroyEvent, Event::Window);
1873impl_from_user_facing_type_for_event_enum!(DesktopCreateEvent, Event::Window);
1874impl_from_user_facing_type_for_event_enum!(CreateEvent, Event::Window);
1875
1876impl_try_from_event_for_interface_enum!(WindowEvents, Event::Window);
1877impl_from_interface_event_enum_for_event!(WindowEvents, Event::Window);
1878
1879event_wrapper_test_cases!(WindowEvents, MoveEvent);
1880
1881impl DBusMatchRule for WindowEvents {
1882	const MATCH_RULE_STRING: &'static str = "type='signal',interface='org.a11y.atspi.Event.Window'";
1883}
1884
1885impl DBusInterface for WindowEvents {
1886	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Event.Window";
1887}
1888
1889impl RegistryEventString for WindowEvents {
1890	const REGISTRY_EVENT_STRING: &'static str = "window:";
1891}
1892
1893#[cfg(feature = "zbus")]
1894impl EventWrapperMessageConversion for WindowEvents {
1895	fn try_from_message_interface_checked(
1896		msg: &zbus::Message,
1897		hdr: &Header,
1898	) -> Result<Self, AtspiError> {
1899		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
1900		match member.as_str() {
1901			WindowPropertyChangeEvent::DBUS_MEMBER => Ok(WindowEvents::PropertyChange(
1902				WindowPropertyChangeEvent::from_message_unchecked(msg, hdr)?,
1903			)),
1904			MinimizeEvent::DBUS_MEMBER => {
1905				Ok(WindowEvents::Minimize(MinimizeEvent::from_message_unchecked(msg, hdr)?))
1906			}
1907			MaximizeEvent::DBUS_MEMBER => {
1908				Ok(WindowEvents::Maximize(MaximizeEvent::from_message_unchecked(msg, hdr)?))
1909			}
1910			RestoreEvent::DBUS_MEMBER => {
1911				Ok(WindowEvents::Restore(RestoreEvent::from_message_unchecked(msg, hdr)?))
1912			}
1913			CloseEvent::DBUS_MEMBER => {
1914				Ok(WindowEvents::Close(CloseEvent::from_message_unchecked(msg, hdr)?))
1915			}
1916			CreateEvent::DBUS_MEMBER => {
1917				Ok(WindowEvents::Create(CreateEvent::from_message_unchecked(msg, hdr)?))
1918			}
1919			ReparentEvent::DBUS_MEMBER => {
1920				Ok(WindowEvents::Reparent(ReparentEvent::from_message_unchecked(msg, hdr)?))
1921			}
1922			DesktopCreateEvent::DBUS_MEMBER => Ok(WindowEvents::DesktopCreate(
1923				DesktopCreateEvent::from_message_unchecked(msg, hdr)?,
1924			)),
1925			DesktopDestroyEvent::DBUS_MEMBER => Ok(WindowEvents::DesktopDestroy(
1926				DesktopDestroyEvent::from_message_unchecked(msg, hdr)?,
1927			)),
1928			DestroyEvent::DBUS_MEMBER => {
1929				Ok(WindowEvents::Destroy(DestroyEvent::from_message_unchecked(msg, hdr)?))
1930			}
1931			ActivateEvent::DBUS_MEMBER => {
1932				Ok(WindowEvents::Activate(ActivateEvent::from_message_unchecked(msg, hdr)?))
1933			}
1934			DeactivateEvent::DBUS_MEMBER => {
1935				Ok(WindowEvents::Deactivate(DeactivateEvent::from_message_unchecked(msg, hdr)?))
1936			}
1937			RaiseEvent::DBUS_MEMBER => {
1938				Ok(WindowEvents::Raise(RaiseEvent::from_message_unchecked(msg, hdr)?))
1939			}
1940			LowerEvent::DBUS_MEMBER => {
1941				Ok(WindowEvents::Lower(LowerEvent::from_message_unchecked(msg, hdr)?))
1942			}
1943			MoveEvent::DBUS_MEMBER => {
1944				Ok(WindowEvents::Move(MoveEvent::from_message_unchecked(msg, hdr)?))
1945			}
1946			ResizeEvent::DBUS_MEMBER => {
1947				Ok(WindowEvents::Resize(ResizeEvent::from_message_unchecked(msg, hdr)?))
1948			}
1949			ShadeEvent::DBUS_MEMBER => {
1950				Ok(WindowEvents::Shade(ShadeEvent::from_message_unchecked(msg, hdr)?))
1951			}
1952			UUshadeEvent::DBUS_MEMBER => {
1953				Ok(WindowEvents::UUshade(UUshadeEvent::from_message_unchecked(msg, hdr)?))
1954			}
1955			RestyleEvent::DBUS_MEMBER => {
1956				Ok(WindowEvents::Restyle(RestyleEvent::from_message_unchecked(msg, hdr)?))
1957			}
1958			_ => Err(AtspiError::MemberMatch("No matching member for Window".into())),
1959		}
1960	}
1961}
1962
1963#[cfg(feature = "zbus")]
1964impl TryFrom<&zbus::Message> for WindowEvents {
1965	type Error = AtspiError;
1966	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
1967		Self::try_from_message(msg)
1968	}
1969}
1970
1971impl_from_user_facing_event_for_interface_event_enum!(
1972	WindowPropertyChangeEvent,
1973	WindowEvents,
1974	WindowEvents::PropertyChange
1975);
1976impl_try_from_event_for_user_facing_type!(
1977	WindowPropertyChangeEvent,
1978	WindowEvents::PropertyChange,
1979	Event::Window
1980);
1981impl_from_user_facing_event_for_interface_event_enum!(
1982	MinimizeEvent,
1983	WindowEvents,
1984	WindowEvents::Minimize
1985);
1986impl_try_from_event_for_user_facing_type!(MinimizeEvent, WindowEvents::Minimize, Event::Window);
1987impl_from_user_facing_event_for_interface_event_enum!(
1988	MaximizeEvent,
1989	WindowEvents,
1990	WindowEvents::Maximize
1991);
1992impl_try_from_event_for_user_facing_type!(MaximizeEvent, WindowEvents::Maximize, Event::Window);
1993impl_from_user_facing_event_for_interface_event_enum!(
1994	RestoreEvent,
1995	WindowEvents,
1996	WindowEvents::Restore
1997);
1998impl_try_from_event_for_user_facing_type!(RestoreEvent, WindowEvents::Restore, Event::Window);
1999impl_from_user_facing_event_for_interface_event_enum!(
2000	CloseEvent,
2001	WindowEvents,
2002	WindowEvents::Close
2003);
2004impl_try_from_event_for_user_facing_type!(CloseEvent, WindowEvents::Close, Event::Window);
2005impl_from_user_facing_event_for_interface_event_enum!(
2006	CreateEvent,
2007	WindowEvents,
2008	WindowEvents::Create
2009);
2010impl_try_from_event_for_user_facing_type!(CreateEvent, WindowEvents::Create, Event::Window);
2011impl_from_user_facing_event_for_interface_event_enum!(
2012	ReparentEvent,
2013	WindowEvents,
2014	WindowEvents::Reparent
2015);
2016impl_try_from_event_for_user_facing_type!(ReparentEvent, WindowEvents::Reparent, Event::Window);
2017impl_from_user_facing_event_for_interface_event_enum!(
2018	DesktopCreateEvent,
2019	WindowEvents,
2020	WindowEvents::DesktopCreate
2021);
2022impl_try_from_event_for_user_facing_type!(
2023	DesktopCreateEvent,
2024	WindowEvents::DesktopCreate,
2025	Event::Window
2026);
2027impl_from_user_facing_event_for_interface_event_enum!(
2028	DesktopDestroyEvent,
2029	WindowEvents,
2030	WindowEvents::DesktopDestroy
2031);
2032impl_try_from_event_for_user_facing_type!(
2033	DesktopDestroyEvent,
2034	WindowEvents::DesktopDestroy,
2035	Event::Window
2036);
2037impl_from_user_facing_event_for_interface_event_enum!(
2038	DestroyEvent,
2039	WindowEvents,
2040	WindowEvents::Destroy
2041);
2042impl_try_from_event_for_user_facing_type!(DestroyEvent, WindowEvents::Destroy, Event::Window);
2043impl_from_user_facing_event_for_interface_event_enum!(
2044	ActivateEvent,
2045	WindowEvents,
2046	WindowEvents::Activate
2047);
2048impl_try_from_event_for_user_facing_type!(ActivateEvent, WindowEvents::Activate, Event::Window);
2049impl_from_user_facing_event_for_interface_event_enum!(
2050	DeactivateEvent,
2051	WindowEvents,
2052	WindowEvents::Deactivate
2053);
2054impl_try_from_event_for_user_facing_type!(DeactivateEvent, WindowEvents::Deactivate, Event::Window);
2055impl_from_user_facing_event_for_interface_event_enum!(
2056	RaiseEvent,
2057	WindowEvents,
2058	WindowEvents::Raise
2059);
2060impl_try_from_event_for_user_facing_type!(RaiseEvent, WindowEvents::Raise, Event::Window);
2061impl_from_user_facing_event_for_interface_event_enum!(
2062	LowerEvent,
2063	WindowEvents,
2064	WindowEvents::Lower
2065);
2066impl_try_from_event_for_user_facing_type!(LowerEvent, WindowEvents::Lower, Event::Window);
2067impl_from_user_facing_event_for_interface_event_enum!(MoveEvent, WindowEvents, WindowEvents::Move);
2068impl_try_from_event_for_user_facing_type!(MoveEvent, WindowEvents::Move, Event::Window);
2069impl_from_user_facing_event_for_interface_event_enum!(
2070	ResizeEvent,
2071	WindowEvents,
2072	WindowEvents::Resize
2073);
2074impl_try_from_event_for_user_facing_type!(ResizeEvent, WindowEvents::Resize, Event::Window);
2075impl_from_user_facing_event_for_interface_event_enum!(
2076	ShadeEvent,
2077	WindowEvents,
2078	WindowEvents::Shade
2079);
2080impl_try_from_event_for_user_facing_type!(ShadeEvent, WindowEvents::Shade, Event::Window);
2081impl_from_user_facing_event_for_interface_event_enum!(
2082	UUshadeEvent,
2083	WindowEvents,
2084	WindowEvents::UUshade
2085);
2086impl_try_from_event_for_user_facing_type!(UUshadeEvent, WindowEvents::UUshade, Event::Window);
2087impl_from_user_facing_event_for_interface_event_enum!(
2088	RestyleEvent,
2089	WindowEvents,
2090	WindowEvents::Restyle
2091);
2092impl_try_from_event_for_user_facing_type!(RestyleEvent, WindowEvents::Restyle, Event::Window);
2093
2094/// The events that can be emitted by the registry daemon.
2095/// This enum is used to wrap the events that are emitted by the registry daemon.
2096/// The events are [`EventListenerRegisteredEvent`] and [`EventListenerDeregisteredEvent`].
2097#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
2098#[allow(clippy::module_name_repetitions)]
2099pub enum EventListenerEvents {
2100	/// See: [`EventListenerRegisteredEvent`].
2101	Registered(EventListenerRegisteredEvent),
2102	/// See: [`EventListenerDeregisteredEvent`].
2103	Deregistered(EventListenerDeregisteredEvent),
2104}
2105
2106impl_tryfrommessage_for_event_wrapper!(EventListenerEvents);
2107
2108impl DBusInterface for EventListenerEvents {
2109	const DBUS_INTERFACE: &'static str = "org.a11y.atspi.Registry";
2110}
2111
2112impl DBusMatchRule for EventListenerEvents {
2113	const MATCH_RULE_STRING: &'static str =
2114		"type='signal',interface='org.a11y.atspi.Event.Registry'";
2115}
2116
2117impl RegistryEventString for EventListenerEvents {
2118	const REGISTRY_EVENT_STRING: &'static str = "Event";
2119}
2120
2121impl EventTypeProperties for EventListenerEvents {
2122	fn member(&self) -> &'static str {
2123		match self {
2124			Self::Registered(inner) => inner.member(),
2125			Self::Deregistered(inner) => inner.member(),
2126		}
2127	}
2128
2129	fn match_rule(&self) -> &'static str {
2130		match self {
2131			Self::Registered(inner) => inner.match_rule(),
2132			Self::Deregistered(inner) => inner.match_rule(),
2133		}
2134	}
2135
2136	fn interface(&self) -> &'static str {
2137		match self {
2138			Self::Registered(inner) => inner.interface(),
2139			Self::Deregistered(inner) => inner.interface(),
2140		}
2141	}
2142
2143	fn registry_string(&self) -> &'static str {
2144		match self {
2145			Self::Registered(inner) => inner.registry_string(),
2146			Self::Deregistered(inner) => inner.registry_string(),
2147		}
2148	}
2149}
2150
2151impl EventProperties for EventListenerEvents {
2152	fn path(&self) -> ObjectPath<'_> {
2153		match self {
2154			Self::Registered(inner) => inner.path(),
2155			Self::Deregistered(inner) => inner.path(),
2156		}
2157	}
2158	fn sender(&self) -> UniqueName<'_> {
2159		match self {
2160			Self::Registered(inner) => inner.sender(),
2161			Self::Deregistered(inner) => inner.sender(),
2162		}
2163	}
2164}
2165
2166#[cfg(feature = "zbus")]
2167impl crate::events::traits::EventWrapperMessageConversion for EventListenerEvents {
2168	fn try_from_message_interface_checked(
2169		msg: &zbus::Message,
2170		hdr: &zbus::message::Header,
2171	) -> Result<Self, crate::AtspiError> {
2172		let member = hdr.member().ok_or(AtspiError::MissingMember)?;
2173		match member.as_str() {
2174			EventListenerRegisteredEvent::DBUS_MEMBER => Ok(EventListenerEvents::Registered(
2175				EventListenerRegisteredEvent::from_message_unchecked(msg, hdr)?,
2176			)),
2177			EventListenerDeregisteredEvent::DBUS_MEMBER => Ok(EventListenerEvents::Deregistered(
2178				EventListenerDeregisteredEvent::from_message_unchecked(msg, hdr)?,
2179			)),
2180			_ => Err(AtspiError::MemberMatch(format!(
2181				"No member {} in {}",
2182				member.as_str(),
2183				Self::DBUS_INTERFACE
2184			))),
2185		}
2186	}
2187}
2188
2189#[cfg(feature = "zbus")]
2190impl TryFrom<&zbus::Message> for EventListenerEvents {
2191	type Error = AtspiError;
2192	fn try_from(msg: &zbus::Message) -> Result<Self, Self::Error> {
2193		<Self as crate::events::traits::TryFromMessage>::try_from_message(msg)
2194	}
2195}
2196
2197impl_try_from_event_for_interface_enum!(EventListenerEvents, Event::Listener);
2198impl_from_interface_event_enum_for_event!(EventListenerEvents, Event::Listener);
2199
2200impl From<AvailableEvent> for Event {
2201	fn from(ev: AvailableEvent) -> Event {
2202		Event::Available(ev)
2203	}
2204}
2205
2206#[cfg(feature = "zbus")]
2207impl TryFrom<Event> for AvailableEvent {
2208	type Error = AtspiError;
2209	fn try_from(generic_event: Event) -> Result<AvailableEvent, Self::Error> {
2210		if let Event::Available(specific_event) = generic_event {
2211			Ok(specific_event)
2212		} else {
2213			Err(AtspiError::Conversion("Invalid type"))
2214		}
2215	}
2216}
2217
2218event_wrapper_test_cases!(EventListenerEvents, EventListenerRegisteredEvent);