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 { 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", } } }