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
//! Common types for `org.a11y.atspi.Cache` events.
//!

use crate::{Accessible, InterfaceSet, Role, StateSet};
use serde::{Deserialize, Serialize};
use zvariant::Type;

/// The item type provided by `Cache:Add` signals
#[allow(clippy::module_name_repetitions)]
#[derive(Clone, Debug, Serialize, Deserialize, Type, PartialEq, Eq, Hash)]
pub struct CacheItem {
	/// The accessible object (within the application)   (so)
	pub object: Accessible,
	/// The application (root object(?)    (so)
	pub app: Accessible,
	/// The parent object.  (so)
	pub parent: Accessible,
	/// 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,
	/// Accessible 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: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/object".try_into().unwrap(),
			},
			app: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/application".try_into().unwrap(),
			},
			parent: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/parent".try_into().unwrap(),
			},
			index: 0,
			children: 0,
			ifaces: InterfaceSet::empty(),
			short_name: String::default(),
			role: Role::Invalid,
			name: String::default(),
			states: StateSet::empty(),
		}
	}
}

#[test]
fn zvariant_type_signature_of_cache_item() {
	assert_eq!(
		CacheItem::signature(),
		zbus::zvariant::Signature::from_static_str("((so)(so)(so)iiassusau)").unwrap()
	);
}

/// 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: Accessible,
	/// The application (root object(?)    (so)
	pub app: Accessible,
	/// The parent object.  (so)
	pub parent: Accessible,
	/// List of references to the accessible's children.  a(so)
	pub children: Vec<Accessible>,
	/// The exposed interface(s) set.  as
	pub ifaces: InterfaceSet,
	/// The short localized name.  s
	pub short_name: String,
	/// Accessible 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: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/object".try_into().unwrap(),
			},
			app: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/application".try_into().unwrap(),
			},
			parent: Accessible {
				name: ":0.0".into(),
				path: "/org/a11y/atspi/accessible/parent".try_into().unwrap(),
			},
			children: Vec::new(),
			ifaces: InterfaceSet::empty(),
			short_name: String::default(),
			role: Role::Invalid,
			name: String::default(),
			states: StateSet::empty(),
		}
	}
}

#[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()
	);
}