diff --git a/atspi-common/src/action.rs b/atspi-common/src/action.rs new file mode 100644 index 00000000..34f318bf --- /dev/null +++ b/atspi-common/src/action.rs @@ -0,0 +1,29 @@ +use serde::{Deserialize, Serialize}; +use zvariant::Type; + +/// An action which may be triggered through the accessibility API. +#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize, Type)] +pub struct Action { + /// The name of the action + pub name: String, + /// Description of the action + pub description: String, + // TODO: should be an enum/stricter type; this is why it's in its own file. + /// The keybinding(s) used to trigger it (without the AT). + pub keybinding: String, +} + +#[cfg(test)] +mod test { + use super::Action; + use zbus_lockstep::method_return_signature; + use zvariant::Type; + #[test] + fn validate_action_signature() { + // signature is of type `a(sss)`, where `(sss)` is the type we're validating. + let action_signature = + method_return_signature!(member: "GetActions", interface: "org.a11y.atspi.Action") + .slice(1..); + assert_eq!(Action::signature(), action_signature); + } +} diff --git a/atspi-common/src/lib.rs b/atspi-common/src/lib.rs index 40eb944b..66a40915 100644 --- a/atspi-common/src/lib.rs +++ b/atspi-common/src/lib.rs @@ -14,6 +14,8 @@ extern crate static_assertions; #[macro_use] pub(crate) mod macros; +pub mod action; +pub use action::Action; pub mod object_match; pub use object_match::{MatchType, ObjectMatchRule, SortOrder, TreeTraversalType}; pub mod object_ref; diff --git a/atspi-proxies/src/action.rs b/atspi-proxies/src/action.rs index a22a0160..c7241173 100644 --- a/atspi-proxies/src/action.rs +++ b/atspi-proxies/src/action.rs @@ -17,6 +17,8 @@ //! [TextProxy]: crate::text::TextProxy //! [ValueProxy]: crate::value::ValueProxy +use atspi_common::Action; + /// A handle for a remote object implementing the `org.a11y.atspi.Action` /// interface. /// @@ -60,7 +62,7 @@ trait Action { /// [`get_key_binding`]: ActionProxy#method.get_key_binding /// [`get_localized_name`]: ActionProxy#method.get_localized_name /// [`get_description`]: ActionProxy#method.get_description - fn get_actions(&self) -> zbus::Result>; + fn get_actions(&self) -> zbus::Result>; /// Returns the localized description for the action at the specified /// index, starting at zero.