From 7a04e45dcaab3e9489b7d2ce536a8bbd1e166f60 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 11 Mar 2025 16:44:06 -0700 Subject: [PATCH] hardware: Allow string codec for DeviceType and SteamDeckVariant --- src/hardware.rs | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/src/hardware.rs b/src/hardware.rs index 01cfd67..1ac0b81 100644 --- a/src/hardware.rs +++ b/src/hardware.rs @@ -5,7 +5,7 @@ * SPDX-License-Identifier: MIT */ -use anyhow::{bail, ensure, Error, Result}; +use anyhow::{bail, ensure, Result}; use num_enum::TryFromPrimitive; use std::str::FromStr; use strum::{Display, EnumString}; @@ -21,7 +21,8 @@ const SYS_VENDOR_PATH: &str = "/sys/class/dmi/id/sys_vendor"; const BOARD_NAME_PATH: &str = "/sys/class/dmi/id/board_name"; const PRODUCT_NAME_PATH: &str = "/sys/class/dmi/id/product_name"; -#[derive(PartialEq, Debug, Default, Copy, Clone)] +#[derive(Display, EnumString, PartialEq, Debug, Default, Copy, Clone)] +#[strum(serialize_all = "snake_case", ascii_case_insensitive)] pub(crate) enum SteamDeckVariant { #[default] Unknown, @@ -29,7 +30,8 @@ pub(crate) enum SteamDeckVariant { Galileo, } -#[derive(PartialEq, Debug, Default, Copy, Clone)] +#[derive(Display, EnumString, PartialEq, Debug, Default, Copy, Clone)] +#[strum(serialize_all = "snake_case", ascii_case_insensitive)] pub(crate) enum DeviceType { #[default] Unknown, @@ -47,17 +49,6 @@ pub enum FanControlState { Os = 1, } -impl FromStr for SteamDeckVariant { - type Err = Error; - fn from_str(input: &str) -> Result { - Ok(match input { - "Jupiter" => SteamDeckVariant::Jupiter, - "Galileo" => SteamDeckVariant::Galileo, - _ => SteamDeckVariant::Unknown, - }) - } -} - #[derive(Display, EnumString, PartialEq, Debug, Copy, Clone, TryFromPrimitive)] #[strum(ascii_case_insensitive)] #[repr(u32)] @@ -73,7 +64,7 @@ pub(crate) async fn steam_deck_variant() -> Result { return Ok(SteamDeckVariant::Unknown); } let board_name = fs::read_to_string(path(BOARD_NAME_PATH)).await?; - SteamDeckVariant::from_str(board_name.trim_end()) + Ok(SteamDeckVariant::from_str(board_name.trim_end()).unwrap_or_default()) } pub(crate) async fn device_type() -> Result {