1use xa11y_core::input::{InputProvider, Key, MouseButton, Point, ScrollDelta};
4use xa11y_core::{
5 ElementData, Error, Provider, Rect, Result, Screenshot, ScreenshotProvider, Subscription,
6};
7
8#[derive(Default)]
9pub struct LinuxProvider;
10
11impl LinuxProvider {
12 pub fn new() -> Result<Self> {
13 Ok(Self)
14 }
15}
16
17#[derive(Default)]
18pub struct LinuxInputProvider;
19
20impl LinuxInputProvider {
21 pub fn new() -> Result<Self> {
22 Err(Error::Platform {
23 code: -1,
24 message: "Linux input backend only available on Linux".to_string(),
25 })
26 }
27}
28
29impl InputProvider for LinuxInputProvider {
30 fn pointer_move(&self, _: Point) -> Result<()> {
31 unreachable!()
32 }
33 fn pointer_down(&self, _: MouseButton) -> Result<()> {
34 unreachable!()
35 }
36 fn pointer_up(&self, _: MouseButton) -> Result<()> {
37 unreachable!()
38 }
39 fn pointer_click(&self, _: Point, _: MouseButton, _: u32) -> Result<()> {
40 unreachable!()
41 }
42 fn pointer_scroll(&self, _: Point, _: ScrollDelta) -> Result<()> {
43 unreachable!()
44 }
45 fn key_down(&self, _: &Key) -> Result<()> {
46 unreachable!()
47 }
48 fn key_up(&self, _: &Key) -> Result<()> {
49 unreachable!()
50 }
51 fn type_text(&self, _: &str) -> Result<()> {
52 unreachable!()
53 }
54}
55
56pub struct LinuxScreenshot;
57
58impl LinuxScreenshot {
59 pub fn new() -> Result<Self> {
60 Err(Error::Platform {
61 code: -1,
62 message: "Linux screenshot backend only available on Linux".to_string(),
63 })
64 }
65}
66
67impl ScreenshotProvider for LinuxScreenshot {
68 fn capture_full(&self) -> Result<Screenshot> {
69 unreachable!()
70 }
71 fn capture_region(&self, _: Rect) -> Result<Screenshot> {
72 unreachable!()
73 }
74}
75
76const NOT_AVAILABLE: &str = "Linux backend not available on this platform";
77
78fn unavailable() -> Error {
79 Error::Platform {
80 code: -1,
81 message: NOT_AVAILABLE.to_string(),
82 }
83}
84
85impl Provider for LinuxProvider {
86 fn get_children(&self, _: Option<&ElementData>) -> Result<Vec<ElementData>> {
87 Err(unavailable())
88 }
89
90 fn get_parent(&self, _: &ElementData) -> Result<Option<ElementData>> {
91 Err(unavailable())
92 }
93
94 fn press(&self, _: &ElementData) -> Result<()> {
95 Err(unavailable())
96 }
97
98 fn focus(&self, _: &ElementData) -> Result<()> {
99 Err(unavailable())
100 }
101
102 fn blur(&self, _: &ElementData) -> Result<()> {
103 Err(unavailable())
104 }
105
106 fn toggle(&self, _: &ElementData) -> Result<()> {
107 Err(unavailable())
108 }
109
110 fn select(&self, _: &ElementData) -> Result<()> {
111 Err(unavailable())
112 }
113
114 fn expand(&self, _: &ElementData) -> Result<()> {
115 Err(unavailable())
116 }
117
118 fn collapse(&self, _: &ElementData) -> Result<()> {
119 Err(unavailable())
120 }
121
122 fn show_menu(&self, _: &ElementData) -> Result<()> {
123 Err(unavailable())
124 }
125
126 fn increment(&self, _: &ElementData) -> Result<()> {
127 Err(unavailable())
128 }
129
130 fn decrement(&self, _: &ElementData) -> Result<()> {
131 Err(unavailable())
132 }
133
134 fn scroll_into_view(&self, _: &ElementData) -> Result<()> {
135 Err(unavailable())
136 }
137
138 fn set_value(&self, _: &ElementData, _: &str) -> Result<()> {
139 Err(unavailable())
140 }
141
142 fn set_numeric_value(&self, _: &ElementData, _: f64) -> Result<()> {
143 Err(unavailable())
144 }
145
146 fn type_text(&self, _: &ElementData, _: &str) -> Result<()> {
147 Err(unavailable())
148 }
149
150 fn set_text_selection(&self, _: &ElementData, _: u32, _: u32) -> Result<()> {
151 Err(unavailable())
152 }
153
154 fn perform_action(&self, _: &ElementData, _: &str) -> Result<()> {
155 Err(unavailable())
156 }
157
158 fn subscribe(&self, _: &ElementData) -> Result<Subscription> {
159 Err(unavailable())
160 }
161}