pub use crate::api::cluster::Cluster;
#[unsafe(no_mangle)]
pub extern "C" fn soyokaze_cores() -> u32 {
Cluster::cores() as u32
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_workers(cluster: *const Cluster) -> u32 {
unsafe { cluster.as_ref() }.map_or(0, |cluster| cluster.workers() as u32)
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_address_count(cluster: *const Cluster) -> usize {
unsafe { cluster.as_ref() }.map_or(0, |cluster| cluster.addresses().len())
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_port(cluster: *const Cluster) -> u16 {
unsafe { cluster.as_ref() }.and_then(|cluster| cluster.address()).map_or(0, |address| address.port())
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_port_at(cluster: *const Cluster, index: usize) -> u16 {
unsafe { cluster.as_ref() }.and_then(|cluster| cluster.addresses().get(index)).map_or(0, |address| address.port())
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_address_at(cluster: *const Cluster, index: usize) -> crate::ffi::Buffer {
match unsafe { cluster.as_ref() }.and_then(|cluster| cluster.addresses().get(index)) {
Some(address) => crate::ffi::Buffer::new(address.to_string().into_bytes()),
None => crate::ffi::Buffer::EMPTY,
}
}
#[unsafe(no_mangle)]
pub unsafe extern "C" fn soyokaze_cluster_close(cluster: *mut Cluster, timeout: f64) {
if cluster.is_null() {
return;
}
unsafe { Box::from_raw(cluster) }.close((timeout >= 0.0).then_some(timeout));
}