use std::fmt::{Display, Formatter}; use enum_map::Enum; use serde::Deserialize; use loupedeck_serial::characteristics::LoupedeckButton; #[derive(Debug, Eq, PartialEq, Hash, Clone, Copy, Deserialize, Enum)] pub enum ButtonPosition { #[serde(rename = "0")] N0, #[serde(rename = "1")] N1, #[serde(rename = "2")] N2, #[serde(rename = "3")] N3, #[serde(rename = "4")] N4, #[serde(rename = "5")] N5, #[serde(rename = "6")] N6, #[serde(rename = "7")] N7, } impl ButtonPosition { pub fn of(button: &LoupedeckButton) -> Self { match button { LoupedeckButton::N0 => Self::N0, LoupedeckButton::N1 => Self::N1, LoupedeckButton::N2 => Self::N2, LoupedeckButton::N3 => Self::N3, LoupedeckButton::N4 => Self::N4, LoupedeckButton::N5 => Self::N5, LoupedeckButton::N6 => Self::N6, LoupedeckButton::N7 => Self::N7, } } } impl Display for ButtonPosition { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { f.write_str(match self { ButtonPosition::N0 => "0", ButtonPosition::N1 => "1", ButtonPosition::N2 => "2", ButtonPosition::N3 => "3", ButtonPosition::N4 => "4", ButtonPosition::N5 => "5", ButtonPosition::N6 => "6", ButtonPosition::N7 => "7", }) } }