#![doc = include_str!("../README.md")]
use std::{error::Error, fmt::Debug};
#[cfg(all(feature = "nvidia", not(target_os = "macos")))]
mod nvidia;
#[cfg(target_os = "linux")]
mod linux;
#[cfg(target_os = "linux")]
mod platform {
pub use crate::linux::*;
}
#[cfg(target_os = "windows")]
mod windows;
#[cfg(target_os = "windows")]
mod platform {
pub use crate::windows::*;
}
#[cfg(target_os = "macos")]
mod macos;
#[cfg(target_os = "macos")]
mod platform {
pub use crate::macos::*;
}
mod util;
pub trait Gpu: Debug {
fn vendor(&self) -> &str;
fn model(&self) -> &str;
fn family(&self) -> &str;
fn device_id(&self) -> &u32;
#[cfg(feature = "gpu_info")]
fn info(&self) -> Box<dyn GpuInfo>;
}
#[cfg(feature = "gpu_info")]
pub trait GpuInfo {
fn total_vram(&self) -> u64;
fn used_vram(&self) -> u64;
fn load_pct(&self) -> u32;
fn temperature(&self) -> u32;
}
pub fn active_gpu() -> Result<Box<dyn Gpu>, Box<dyn Error>> {
platform::active_gpu()
}