Skip to main content

xa11y_linux/
stub.rs

1//! Stub backend for non-Linux platforms (allows compilation on all targets).
2
3use 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}