use serde::Deserialize; use std::collections::HashMap; #[derive(Debug, Deserialize, Clone)] pub struct HardwareDb { pub metadata: Metadata, pub conflicts: Vec, pub ecosystems: HashMap, pub quirks: Vec, pub discovery: Discovery, pub benchmarking: Benchmarking, pub preflight_checks: Vec, } #[derive(Debug, Deserialize, Clone)] pub struct Metadata { pub version: String, pub updated: String, pub description: String, } #[derive(Debug, Deserialize, Clone)] pub struct Conflict { pub id: String, pub services: Vec, pub contention: String, pub severity: String, pub fix_action: String, pub help_text: String, } #[derive(Debug, Deserialize, Clone)] pub struct Ecosystem { pub vendor_regex: String, pub product_regex: Option, pub polling_cap_ms: Option, pub drivers: Option>, pub fan_manual_mode_cmd: Option, pub fan_auto_mode_cmd: Option, pub safety_register: Option, pub lap_mode_path: Option, pub profiles_path: Option, pub ec_write_required: Option, pub thermal_policy_path: Option, pub policy_map: Option>, pub msr_lock_register: Option, pub msr_lock_bit: Option, pub fan_boost_path: Option, pub ec_tool: Option, pub optimization: Option, pub help_text: Option, } #[derive(Debug, Deserialize, Clone)] pub struct Quirk { pub model_regex: String, pub id: String, pub issue: String, pub action: String, pub monitor_msr: Option, pub reset_bit: Option, pub trigger_path: Option, pub trigger_value: Option, pub target_path: Option, pub format: Option, } #[derive(Debug, Deserialize, Clone)] pub struct Discovery { pub sensors: SensorDiscovery, pub actuators: ActuatorDiscovery, pub configs: HashMap>, pub tools: HashMap, } #[derive(Debug, Deserialize, Clone)] pub struct Benchmarking { pub idle_duration_s: u64, pub stress_duration_min_s: u64, pub stress_duration_max_s: u64, pub cool_down_s: u64, pub power_steps_watts: Vec, } #[derive(Debug, Deserialize, Clone)] pub struct SensorDiscovery { pub temp_labels: Vec, pub fan_labels: Vec, pub hwmon_priority: Vec, } #[derive(Debug, Deserialize, Clone)] pub struct ActuatorDiscovery { pub rapl_paths: Vec, pub amd_energy_paths: Vec, pub governor_files: Vec, } #[derive(Debug, Deserialize, Clone)] pub struct PreflightCheck { pub name: String, pub check_cmd: String, pub fail_help: String, }