1use crate::error::Result;
5use crate::ffi;
6use crate::status::check;
7use core::mem::MaybeUninit;
8
9#[derive(Debug, Clone, Copy, PartialEq, Eq)]
11pub struct HeapInfo {
12 pub free_bytes: usize,
14 pub free_blocks: usize,
16 pub largest_free_block: usize,
18}
19
20impl From<ffi::OS_heap_prop_t> for HeapInfo {
21 fn from(prop: ffi::OS_heap_prop_t) -> Self {
22 Self {
23 free_bytes: prop.free_bytes,
24 free_blocks: prop.free_blocks,
25 largest_free_block: prop.largest_free_block,
26 }
27 }
28}
29
30impl HeapInfo {
31 pub fn query() -> Result<HeapInfo> {
35 let mut prop = MaybeUninit::uninit();
36 check(unsafe { ffi::OS_HeapGetInfo(prop.as_mut_ptr()) })?;
37 Ok(HeapInfo::from(unsafe { prop.assume_init() }))
38 }
39}