use zbus_lockstep_macros::validate;
use zbus_names::{OwnedUniqueName, UniqueName};
#[cfg(feature = "zbus")]
use crate::{error::AtspiError, events::MessageConversion, EventProperties};
use serde::{Deserialize, Serialize};
#[cfg(feature = "zbus")]
use zbus::message::{Body as DbusBody, Header};
use zvariant::Type;
use crate::{
events::{DBusInterface, DBusMatchRule, DBusMember, RegistryEventString},
ObjectRef,
};
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
pub struct EventListenerDeregisteredEvent {
pub item: ObjectRef,
pub deregistered_event: EventListeners,
}
impl_event_type_properties_for_event!(EventListenerDeregisteredEvent);
event_test_cases!(EventListenerDeregisteredEvent, Explicit);
impl_member_interface_registry_string_and_match_rule_for_event!(
EventListenerDeregisteredEvent,
"EventListenerDeregistered",
"org.a11y.atspi.Registry",
"registry:event-listener-deregistered",
"type='signal',interface='org.a11y.atspi.Registry',member='EventListenerDeregistered'"
);
#[cfg(feature = "zbus")]
impl MessageConversion<'_> for EventListenerDeregisteredEvent {
type Body<'a> = EventListeners;
fn from_message_unchecked_parts(item: ObjectRef, body: DbusBody) -> Result<Self, AtspiError> {
let deregistered_event = body.deserialize_unchecked::<Self::Body<'_>>()?;
Ok(Self { item, deregistered_event })
}
fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
let item = header.try_into()?;
let body = msg.body();
Self::from_message_unchecked_parts(item, body)
}
fn body(&self) -> Self::Body<'_> {
self.deregistered_event.clone()
}
}
impl_msg_conversion_ext_for_target_type_with_specified_body_type!(target: EventListenerDeregisteredEvent, body: EventListeners);
impl_from_dbus_message!(EventListenerDeregisteredEvent, Explicit);
impl_event_properties!(EventListenerDeregisteredEvent);
impl_to_dbus_message!(EventListenerDeregisteredEvent);
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize, Default, Eq, Hash)]
pub struct EventListenerRegisteredEvent {
pub item: crate::ObjectRef,
pub registered_event: EventListeners,
}
impl_event_type_properties_for_event!(EventListenerRegisteredEvent);
#[cfg(feature = "zbus")]
impl MessageConversion<'_> for EventListenerRegisteredEvent {
type Body<'a> = EventListeners;
fn from_message_unchecked_parts(
item: ObjectRef,
registered_event: DbusBody,
) -> Result<Self, AtspiError> {
let registered_event = registered_event.deserialize_unchecked()?;
Ok(Self { item, registered_event })
}
fn from_message_unchecked(msg: &zbus::Message, header: &Header) -> Result<Self, AtspiError> {
let item = header.try_into()?;
let body = msg.body();
Self::from_message_unchecked_parts(item, body)
}
fn body(&self) -> Self::Body<'_> {
self.registered_event.clone()
}
}
impl_msg_conversion_ext_for_target_type_with_specified_body_type!(target: EventListenerRegisteredEvent, body: EventListeners);
impl_from_dbus_message!(EventListenerRegisteredEvent, Explicit);
impl_event_properties!(EventListenerRegisteredEvent);
impl_to_dbus_message!(EventListenerRegisteredEvent);
event_test_cases!(EventListenerRegisteredEvent, Explicit);
impl_member_interface_registry_string_and_match_rule_for_event!(
EventListenerRegisteredEvent,
"EventListenerRegistered",
"org.a11y.atspi.Registry",
"registry:event-listener-registered",
"type='signal',interface='org.a11y.atspi.Registry',member='EventListenerRegistered'"
);
#[validate(signal: "EventListenerRegistered")]
#[derive(Debug, Clone, Serialize, Deserialize, Type, PartialEq, Eq, Hash)]
pub struct EventListeners {
pub bus_name: OwnedUniqueName,
pub path: String,
}
impl Default for EventListeners {
fn default() -> Self {
Self {
bus_name: UniqueName::from_static_str_unchecked(":0.0").into(),
path: String::from("/org/a11y/atspi/accessible/null"),
}
}
}
#[cfg(test)]
mod event_listener_tests {
use super::*;
#[test]
fn test_event_listener_default_no_panic() {
let el = EventListeners::default();
assert_eq!(el.bus_name.as_str(), ":0.0");
assert_eq!(el.path.as_str(), "/org/a11y/atspi/accessible/null");
}
}
pub mod socket {
#[cfg(feature = "zbus")]
use crate::events::MessageConversion;
use crate::events::{DBusInterface, DBusMatchRule, DBusMember, RegistryEventString};
#[cfg(feature = "zbus")]
use crate::AtspiError;
#[cfg(feature = "zbus")]
use crate::EventProperties;
use crate::ObjectRef;
#[cfg(feature = "zbus")]
use zbus::message::{Body as DbusBody, Header};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default, Eq, Hash)]
pub struct AvailableEvent {
pub item: ObjectRef,
pub socket: ObjectRef,
}
impl_event_type_properties_for_event!(AvailableEvent);
event_test_cases!(AvailableEvent, Explicit);
impl_member_interface_registry_string_and_match_rule_for_event!(
AvailableEvent,
"Available",
"org.a11y.atspi.Socket",
"",
"type='signal',interface='org.a11y.atspi.Socket',member='Available'"
);
#[cfg(feature = "zbus")]
impl MessageConversion<'_> for AvailableEvent {
type Body<'a> = ObjectRef;
fn from_message_unchecked_parts(
item: ObjectRef,
body: DbusBody,
) -> Result<Self, AtspiError> {
let socket = body.deserialize_unchecked::<Self::Body<'_>>()?;
Ok(Self { item, socket })
}
fn from_message_unchecked(
msg: &zbus::Message,
header: &Header,
) -> Result<Self, AtspiError> {
let item = header.try_into()?;
let body = msg.body();
Self::from_message_unchecked_parts(item, body)
}
fn body(&self) -> Self::Body<'_> {
self.socket.clone()
}
}
impl_msg_conversion_ext_for_target_type_with_specified_body_type!(target: AvailableEvent, body: ObjectRef);
impl_from_dbus_message!(AvailableEvent, Explicit);
impl_event_properties!(AvailableEvent);
impl_to_dbus_message!(AvailableEvent);
}