use std::ffi::CStr;
use crate::sys::fi_freeinfo;
use dma_libfabric_protocol::DmaError;
use crate::configuration::Configuration;
use crate::endpoint::query_info;
pub fn discover_domains(configuration: &Configuration) -> Result<Vec<String>, DmaError> {
let list = query_info(configuration, None)?;
let mut names: Vec<String> = Vec::new();
unsafe {
let mut node = list;
while !node.is_null() {
let current = node;
node = (*current).next;
let name = (*(*current).domain_attr).name;
if name.is_null() {
continue;
}
let Ok(name) = CStr::from_ptr(name).to_str() else {
continue;
};
if !names.iter().any(|existing| existing == name) {
names.push(name.to_string());
}
}
fi_freeinfo(list);
}
Ok(names)
}