mod error;
use core::ffi::CStr;
use darwin_kperf_sys::load::{LibraryHandle, LoadError};
pub use self::error::{FrameworkError, FrameworkErrorKind};
#[derive(Debug)]
pub struct KPerf {
_handle: LibraryHandle,
vtable: darwin_kperf_sys::kperf::VTable,
}
impl KPerf {
pub fn new() -> Result<Self, LoadError> {
Self::load(c"/System/Library/PrivateFrameworks/kperf.framework/kperf")
}
pub fn load(path: &CStr) -> Result<Self, LoadError> {
let handle = LibraryHandle::open(path)?;
let vtable = darwin_kperf_sys::kperf::VTable::load(&handle)?;
Ok(Self {
_handle: handle,
vtable,
})
}
#[must_use]
pub const fn vtable(&self) -> &darwin_kperf_sys::kperf::VTable {
&self.vtable
}
}
#[derive(Debug)]
pub struct KPerfData {
_handle: LibraryHandle,
vtable: darwin_kperf_sys::kperfdata::VTable,
}
impl KPerfData {
pub fn new() -> Result<Self, LoadError> {
Self::load(c"/System/Library/PrivateFrameworks/kperfdata.framework/kperfdata")
}
pub fn load(path: &CStr) -> Result<Self, LoadError> {
let handle = LibraryHandle::open(path)?;
let vtable = darwin_kperf_sys::kperfdata::VTable::load(&handle)?;
Ok(Self {
_handle: handle,
vtable,
})
}
#[must_use]
pub const fn vtable(&self) -> &darwin_kperf_sys::kperfdata::VTable {
&self.vtable
}
}