namespace HardwareMonitorStatusWindow.Service; public class Hardware { public required HardwareType Type { get; set; } public required string Identifier { get; set; } public required string Name { get; set; } public required IEnumerable Sensors { get; set; } internal static Hardware Create(LibreHardwareMonitor.Hardware.IHardware hardware) { return new Hardware { Type = MapHardwareType(hardware.HardwareType), Name = hardware.Name, Identifier = hardware.Identifier.ToString(), Sensors = hardware.Sensors.Select(Sensor.Create) }; } private static HardwareType MapHardwareType(LibreHardwareMonitor.Hardware.HardwareType hardwareType) { return hardwareType switch { LibreHardwareMonitor.Hardware.HardwareType.Motherboard => HardwareType.Motherboard, LibreHardwareMonitor.Hardware.HardwareType.SuperIO => HardwareType.SuperIo, LibreHardwareMonitor.Hardware.HardwareType.Cpu => HardwareType.Cpu, LibreHardwareMonitor.Hardware.HardwareType.Memory => HardwareType.Memory, LibreHardwareMonitor.Hardware.HardwareType.GpuNvidia => HardwareType.GpuNvidia, LibreHardwareMonitor.Hardware.HardwareType.GpuAmd => HardwareType.GpuAmd, LibreHardwareMonitor.Hardware.HardwareType.GpuIntel => HardwareType.GpuIntel, LibreHardwareMonitor.Hardware.HardwareType.Storage => HardwareType.Storage, LibreHardwareMonitor.Hardware.HardwareType.Network => HardwareType.Network, LibreHardwareMonitor.Hardware.HardwareType.Cooler => HardwareType.Cooler, LibreHardwareMonitor.Hardware.HardwareType.EmbeddedController => HardwareType.EmbeddedController, LibreHardwareMonitor.Hardware.HardwareType.Psu => HardwareType.Psu, LibreHardwareMonitor.Hardware.HardwareType.Battery => HardwareType.Battery, _ => throw new ArgumentOutOfRangeException(nameof(hardwareType), hardwareType, null) }; } }