From 128c5ee36aa5862313068090f0cf3a14579932e2 Mon Sep 17 00:00:00 2001 From: Vicki Pfau Date: Tue, 26 Mar 2024 00:42:48 -0700 Subject: [PATCH] hardware: Split HardwareVariant name parsing out from file reading --- src/hardware.rs | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/hardware.rs b/src/hardware.rs index 3978ac1..5c19b06 100644 --- a/src/hardware.rs +++ b/src/hardware.rs @@ -5,16 +5,14 @@ * SPDX-License-Identifier: MIT */ -use anyhow::Result; +use anyhow::{Error, Result}; +use std::str::FromStr; use tokio::fs; use crate::path; const BOARD_VENDOR_PATH: &str = "/sys/class/dmi/id/board_vendor"; const BOARD_NAME_PATH: &str = "/sys/class/dmi/id/board_name"; -const VALVE_VENDOR: &str = "Valve"; -const JUPITER_NAME: &str = "Jupiter"; -const GALILEO_NAME: &str = "Galileo"; #[derive(PartialEq, Debug, Copy, Clone)] pub enum HardwareVariant { @@ -23,18 +21,25 @@ pub enum HardwareVariant { Galileo, } +impl FromStr for HardwareVariant { + type Err = Error; + fn from_str(input: &str) -> Result { + Ok(match input { + "Jupiter" => HardwareVariant::Jupiter, + "Galileo" => HardwareVariant::Galileo, + _ => HardwareVariant::Unknown, + }) + } +} + pub async fn variant() -> Result { let board_vendor = fs::read_to_string(path(BOARD_VENDOR_PATH)).await?; - if board_vendor.trim_end() != VALVE_VENDOR { + if board_vendor.trim_end() != "Valve" { return Ok(HardwareVariant::Unknown); } let board_name = fs::read_to_string(path(BOARD_NAME_PATH)).await?; - Ok(match board_name.trim_end() { - JUPITER_NAME => HardwareVariant::Jupiter, - GALILEO_NAME => HardwareVariant::Galileo, - _ => HardwareVariant::Unknown, - }) + HardwareVariant::from_str(board_name.trim_end()) } #[cfg(test)] @@ -52,25 +57,25 @@ mod test { .expect("create_dir_all"); assert!(variant().await.is_err()); - write(crate::path("/sys/class/dmi/id/board_vendor"), "LENOVO\n") + write(crate::path(BOARD_VENDOR_PATH), "LENOVO\n") .await .expect("write"); assert_eq!(variant().await.unwrap(), HardwareVariant::Unknown); - write(crate::path("/sys/class/dmi/id/board_vendor"), "Valve\n") + write(crate::path(BOARD_VENDOR_PATH), "Valve\n") .await .expect("write"); - write(crate::path("/sys/class/dmi/id/board_name"), "Jupiter\n") + write(crate::path(BOARD_NAME_PATH), "Jupiter\n") .await .expect("write"); assert_eq!(variant().await.unwrap(), HardwareVariant::Jupiter); - write(crate::path("/sys/class/dmi/id/board_name"), "Galileo\n") + write(crate::path(BOARD_NAME_PATH), "Galileo\n") .await .expect("write"); assert_eq!(variant().await.unwrap(), HardwareVariant::Galileo); - write(crate::path("/sys/class/dmi/id/board_name"), "Neptune\n") + write(crate::path(BOARD_NAME_PATH), "Neptune\n") .await .expect("write"); assert_eq!(variant().await.unwrap(), HardwareVariant::Unknown);