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 edbdede9..0601da0c 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;