mirror of
https://github.com/Start9Labs/start-os.git
synced 2026-03-26 02:11:53 +00:00
* update deno * add proxy * remove query params, now auto added by BE * add hardware requirements and BE reg query params * update query params for BE requests * allow multiple arches in hw reqs * explain git hash mismatch * require lshw --------- Co-authored-by: Matt Hill <mattnine@protonmail.com>
50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
use models::{Error, ResultExt};
|
|
use serde::{Deserialize, Serialize};
|
|
use tokio::process::Command;
|
|
|
|
use crate::util::Invoke;
|
|
|
|
const KNOWN_CLASSES: &[&str] = &["processor", "display"];
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
#[serde(tag = "class")]
|
|
#[serde(rename_all = "kebab-case")]
|
|
pub enum LshwDevice {
|
|
Processor(LshwProcessor),
|
|
Display(LshwDisplay),
|
|
}
|
|
impl LshwDevice {
|
|
pub fn class(&self) -> &'static str {
|
|
match self {
|
|
Self::Processor(_) => "processor",
|
|
Self::Display(_) => "display",
|
|
}
|
|
}
|
|
pub fn product(&self) -> &str {
|
|
match self {
|
|
Self::Processor(hw) => hw.product.as_str(),
|
|
Self::Display(hw) => hw.product.as_str(),
|
|
}
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
pub struct LshwProcessor {
|
|
pub product: String,
|
|
}
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
|
pub struct LshwDisplay {
|
|
pub product: String,
|
|
}
|
|
|
|
pub async fn lshw() -> Result<Vec<LshwDevice>, Error> {
|
|
let mut cmd = Command::new("lshw");
|
|
cmd.arg("-json");
|
|
for class in KNOWN_CLASSES {
|
|
cmd.arg("-class").arg(*class);
|
|
}
|
|
serde_json::from_slice(&cmd.invoke(crate::ErrorKind::Lshw).await?)
|
|
.with_kind(crate::ErrorKind::Deserialization)
|
|
}
|