1use crate::types::{Button, CodeMapper, Platform};
4use std::collections::HashMap;
5
6pub 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
47pub 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
52pub 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
60pub 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}