use anyhow::Result;
use serde::{Deserialize, Serialize};
use std::fs::{read_dir, read_to_string};
use crate::traits::ToJson;
pub type Name = String;
pub type Description = String;
#[derive(Debug, Deserialize, Serialize, Clone)]
pub struct Vulnerabilities {
pub list: Vec<(Name, Description)>,
}
const VULN_FILES_DIR: &str = "/sys/devices/system/cpu/vulnerabilities/";
impl Vulnerabilities {
pub fn new() -> Result<Self> {
let mut list = Vec::new();
for file in read_dir(VULN_FILES_DIR)? {
let file = file?.path();
if file.is_file() {
let name = match file.file_name() {
Some(name) => name.to_string_lossy(),
None => continue,
};
let description = read_to_string(&file)?;
list.push((name.to_string(), description));
}
}
list.sort_by_key(|l| l.0.clone());
Ok(Self { list })
}
}
impl ToJson for Vulnerabilities {}