use crate::types::{Button, CodeMapper, Platform};
use std::collections::HashMap;
pub fn all_standard_buttons() -> Vec<Button> {
#[cfg(not(feature = "extended"))]
let buttons = vec![
Button::Left,
Button::Right,
Button::Middle,
Button::X1,
Button::X2,
Button::Extra3,
Button::Extra4,
Button::Extra5,
Button::Extra6,
Button::Extra7,
Button::Extra8,
];
#[cfg(feature = "extended")]
let mut buttons = vec![
Button::Left,
Button::Right,
Button::Middle,
Button::X1,
Button::X2,
Button::Extra3,
Button::Extra4,
Button::Extra5,
Button::Extra6,
Button::Extra7,
Button::Extra8,
];
#[cfg(feature = "extended")]
{
buttons.push(Button::Extra9);
buttons.push(Button::Extra10);
}
buttons
}
pub fn code_to_name(code: usize, platform: Platform) -> Option<String> {
<Button as CodeMapper>::from_code(code, platform).map(|btn| btn.to_string())
}
pub fn platform_button_mapping(platform: Platform) -> HashMap<Button, usize> {
all_standard_buttons()
.into_iter()
.map(|btn| (btn, <Button as CodeMapper>::to_code(&btn, platform)))
.collect()
}
pub fn platform_code_mapping(platform: Platform) -> HashMap<usize, Button> {
all_standard_buttons()
.into_iter()
.map(|btn| (<Button as CodeMapper>::to_code(&btn, platform), btn))
.collect()
}