mouse_codes/
utils.rs

1//! Utility functions for mouse input handling
2
3use crate::types::{Button, CodeMapper, Platform};
4use std::collections::HashMap;
5
6/// Get a list of all standard mouse buttons
7pub fn all_standard_buttons() -> Vec<Button> {
8    #[cfg(not(feature = "extended"))]
9    let buttons = vec![
10        Button::Left,
11        Button::Right,
12        Button::Middle,
13        Button::X1,
14        Button::X2,
15        Button::Extra3,
16        Button::Extra4,
17        Button::Extra5,
18        Button::Extra6,
19        Button::Extra7,
20        Button::Extra8,
21    ];
22
23    #[cfg(feature = "extended")]
24    let mut buttons = vec![
25        Button::Left,
26        Button::Right,
27        Button::Middle,
28        Button::X1,
29        Button::X2,
30        Button::Extra3,
31        Button::Extra4,
32        Button::Extra5,
33        Button::Extra6,
34        Button::Extra7,
35        Button::Extra8,
36    ];
37
38    #[cfg(feature = "extended")]
39    {
40        buttons.push(Button::Extra9);
41        buttons.push(Button::Extra10);
42    }
43
44    buttons
45}
46
47/// Convert a platform-specific button code to a human-readable name
48pub fn code_to_name(code: usize, platform: Platform) -> Option<String> {
49    <Button as CodeMapper>::from_code(code, platform).map(|btn| btn.to_string())
50}
51
52/// Get a mapping of all buttons to their codes for a specific platform
53pub fn platform_button_mapping(platform: Platform) -> HashMap<Button, usize> {
54    all_standard_buttons()
55        .into_iter()
56        .map(|btn| (btn, <Button as CodeMapper>::to_code(&btn, platform)))
57        .collect()
58}
59
60/// Get a reverse mapping of codes to buttons for a specific platform
61pub fn platform_code_mapping(platform: Platform) -> HashMap<usize, Button> {
62    all_standard_buttons()
63        .into_iter()
64        .map(|btn| (<Button as CodeMapper>::to_code(&btn, platform), btn))
65        .collect()
66}