116 lines
2.5 KiB
Rust
116 lines
2.5 KiB
Rust
|
use anyhow::Result;
|
||
|
|
||
|
#[derive(PartialEq, Eq, Hash, Copy, Clone, Debug)]
|
||
|
pub enum ControllerButton {
|
||
|
A,
|
||
|
B,
|
||
|
Y,
|
||
|
X,
|
||
|
|
||
|
Start,
|
||
|
Select,
|
||
|
|
||
|
RightButton,
|
||
|
LeftButton,
|
||
|
|
||
|
RightTrigger,
|
||
|
LeftTrigger,
|
||
|
|
||
|
DPadUp,
|
||
|
DPadDown,
|
||
|
DPadRight,
|
||
|
DPadLeft,
|
||
|
|
||
|
Guide,
|
||
|
|
||
|
LeftStick,
|
||
|
RightStick,
|
||
|
|
||
|
Misc,
|
||
|
|
||
|
Paddle1,
|
||
|
Paddle2,
|
||
|
Paddle3,
|
||
|
Paddle4,
|
||
|
|
||
|
Touchpad,
|
||
|
}
|
||
|
|
||
|
impl TryFrom<&str> for ControllerButton {
|
||
|
type Error = anyhow::Error;
|
||
|
|
||
|
fn try_from(text: &str) -> Result<Self> {
|
||
|
match text {
|
||
|
"A" => Ok(ControllerButton::A),
|
||
|
"B" => Ok(ControllerButton::B),
|
||
|
"X" => Ok(ControllerButton::X),
|
||
|
"Y" => Ok(ControllerButton::Y),
|
||
|
|
||
|
"Select" => Ok(ControllerButton::Select),
|
||
|
"Start" => Ok(ControllerButton::Start),
|
||
|
|
||
|
"RightButton" => Ok(ControllerButton::RightButton),
|
||
|
"LeftButton" => Ok(ControllerButton::LeftButton),
|
||
|
|
||
|
"RightTrigger" => Ok(ControllerButton::RightTrigger),
|
||
|
"LeftTrigger" => Ok(ControllerButton::LeftTrigger),
|
||
|
|
||
|
"DPadUp" => Ok(ControllerButton::DPadUp),
|
||
|
"DPadDown" => Ok(ControllerButton::DPadDown),
|
||
|
"DPadLeft" => Ok(ControllerButton::DPadLeft),
|
||
|
"DPadRight" => Ok(ControllerButton::DPadRight),
|
||
|
|
||
|
"Guide" => Ok(ControllerButton::Guide),
|
||
|
|
||
|
"LeftStick" => Ok(ControllerButton::LeftStick),
|
||
|
"RightStick" => Ok(ControllerButton::RightStick),
|
||
|
|
||
|
_ => Err(anyhow::Error::msg(format!(
|
||
|
"Failed converting ControllerButton from {}",
|
||
|
text
|
||
|
))),
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
impl Into<&'static str> for ControllerButton {
|
||
|
fn into(self) -> &'static str {
|
||
|
use ControllerButton::*;
|
||
|
|
||
|
match self {
|
||
|
A => "A",
|
||
|
B => "B",
|
||
|
Y => "Y",
|
||
|
X => "X",
|
||
|
|
||
|
Start => "Start",
|
||
|
Select => "Select",
|
||
|
|
||
|
RightButton => "RightButton",
|
||
|
LeftButton => "LeftButton",
|
||
|
|
||
|
RightTrigger => "RightTrigger",
|
||
|
LeftTrigger => "LeftTrigger",
|
||
|
|
||
|
DPadUp => "DPadUp",
|
||
|
DPadDown => "DPadDown",
|
||
|
DPadRight => "DPadRight",
|
||
|
DPadLeft => "DPadLeft",
|
||
|
|
||
|
Guide => "Guide",
|
||
|
|
||
|
LeftStick => "LeftStick",
|
||
|
RightStick => "RightStick",
|
||
|
|
||
|
Misc => "Misc",
|
||
|
|
||
|
Paddle1 => "Paddle1",
|
||
|
Paddle2 => "Paddle2",
|
||
|
Paddle3 => "Paddle3",
|
||
|
Paddle4 => "Paddle4",
|
||
|
|
||
|
Touchpad => "Touchpad",
|
||
|
}
|
||
|
}
|
||
|
}
|