selection_capture/
platform.rs1use crate::types::CaptureMethod;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq)]
4pub struct PlatformCapabilities {
5 supported: [bool; 4],
6}
7
8impl PlatformCapabilities {
9 pub fn new(supported: &[CaptureMethod]) -> Self {
10 let mut capabilities = [false; 4];
11 for &method in supported {
12 capabilities[method_index(method)] = true;
13 }
14 Self {
15 supported: capabilities,
16 }
17 }
18
19 pub fn supports(&self, method: CaptureMethod) -> bool {
20 self.supported[method_index(method)]
21 }
22}
23
24const fn method_index(method: CaptureMethod) -> usize {
25 match method {
26 CaptureMethod::AccessibilityPrimary => 0,
27 CaptureMethod::AccessibilityRange => 1,
28 CaptureMethod::ClipboardBorrow => 2,
29 CaptureMethod::SyntheticCopy => 3,
30 }
31}
32
33#[cfg(test)]
34mod tests {
35 use super::*;
36
37 #[test]
38 fn supports_returns_true_for_enabled_methods() {
39 let capabilities = PlatformCapabilities::new(&[
40 CaptureMethod::AccessibilityPrimary,
41 CaptureMethod::ClipboardBorrow,
42 ]);
43
44 assert!(capabilities.supports(CaptureMethod::AccessibilityPrimary));
45 assert!(capabilities.supports(CaptureMethod::ClipboardBorrow));
46 }
47
48 #[test]
49 fn supports_returns_false_for_disabled_methods() {
50 let capabilities = PlatformCapabilities::new(&[
51 CaptureMethod::AccessibilityPrimary,
52 CaptureMethod::ClipboardBorrow,
53 ]);
54
55 assert!(!capabilities.supports(CaptureMethod::AccessibilityRange));
56 assert!(!capabilities.supports(CaptureMethod::SyntheticCopy));
57 }
58}