1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//! Common types for `org.a11y.atspi.Cache` events.
//!

use crate::{InterfaceSet, ObjectRef, Role, StateSet};
use serde::{Deserialize, Serialize};
use zbus_lockstep_macros::validate;
use zbus_names::UniqueName;
use zvariant::{ObjectPath, Type};

/// The item type provided by `Cache:Add` signals
#[allow(clippy::module_name_repetitions)]
#[derive(Clone, Debug, Serialize, Deserialize, Type, PartialEq, Eq, Hash)]
#[validate(signal: "AddAccessible")]
pub struct CacheItem {
	/// The accessible object (within the application)   (so)
	pub object: ObjectRef,
	/// The application (root object(?)    (so)
	pub app: ObjectRef,
	/// The parent object.  (so)
	pub parent: ObjectRef,
	/// The accessbile index in parent.  i
	pub index: i32,
	/// Child count of the accessible  i
	pub children: i32,
	/// The exposed interface(s) set.  as
	pub ifaces: InterfaceSet,
	/// The short localized name.  s
	pub short_name: String,
	/// `ObjectRef` role. u
	pub role: Role,
	/// More detailed localized name.
	pub name: String,
	/// The states applicable to the accessible.  au
	pub states: StateSet,
}

impl Default for CacheItem {
	fn default() -> Self {
		Self {
			object: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/object")
					.unwrap()
					.into(),
			},
			app: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/application")
					.unwrap()
					.into(),
			},
			parent: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/parent")
					.unwrap()
					.into(),
			},
			index: 0,
			children: 0,
			ifaces: InterfaceSet::empty(),
			short_name: String::default(),
			role: Role::Invalid,
			name: String::default(),
			states: StateSet::empty(),
		}
	}
}

/// The item type provided by `Cache:Add` signals
#[allow(clippy::module_name_repetitions)]
#[derive(Clone, Debug, Serialize, Deserialize, Type, PartialEq, Eq, Hash)]
pub struct LegacyCacheItem {
	/// The accessible object (within the application)   (so)
	pub object: ObjectRef,
	/// The application (root object(?)    (so)
	pub app: ObjectRef,
	/// The parent object.  (so)
	pub parent: ObjectRef,
	/// List of references to the accessible's children.  a(so)
	pub children: Vec<ObjectRef>,
	/// The exposed interface(s) set.  as
	pub ifaces: InterfaceSet,
	/// The short localized name.  s
	pub short_name: String,
	/// `ObjectRef` role. u
	pub role: Role,
	/// More detailed localized name.
	pub name: String,
	/// The states applicable to the accessible.  au
	pub states: StateSet,
}
impl Default for LegacyCacheItem {
	fn default() -> Self {
		Self {
			object: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/object")
					.unwrap()
					.into(),
			},
			app: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/application")
					.unwrap()
					.into(),
			},
			parent: ObjectRef {
				name: UniqueName::from_static_str(":0.0").unwrap().into(),
				path: ObjectPath::from_static_str("/org/a11y/atspi/accessible/parent")
					.unwrap()
					.into(),
			},
			children: Vec::new(),
			ifaces: InterfaceSet::empty(),
			short_name: String::default(),
			role: Role::Invalid,
			name: String::default(),
			states: StateSet::empty(),
		}
	}
}

#[cfg(test)]
#[test]
fn zvariant_type_signature_of_legacy_cache_item() {
	assert_eq!(
		LegacyCacheItem::signature(),
		zbus::zvariant::Signature::from_static_str("((so)(so)(so)a(so)assusau)").unwrap()
	);
}