#![cfg(target_os = "linux")]
use std::slice;
use std::io::Error;
use rados::*;
#[allow(unused_variables)]
pub fn rados_pools(cluster: rados_t)
-> Result<Vec<String>, Error> {
let mut pools: Vec<String> = Vec::new();
let pool_slice: &[u8];
let buf_size: usize = 500;
let mut pool_buffer: Vec<u8> = Vec::with_capacity(buf_size);
unsafe {
let len = rados_pool_list(cluster,
pool_buffer.as_mut_ptr() as *mut i8,
buf_size);
pool_slice = slice::from_raw_parts(pool_buffer.as_mut_ptr(), buf_size);
let mut new: bool = true;
let mut new_word_slice: Vec<u8> = Vec::with_capacity(50);
let mut s: String;
for p in pool_slice.chunks(1) {
if p[0] == b'\0' {
if new {
break;
}
new = true;
s = String::from_utf8(new_word_slice.clone()).unwrap();
pools.push(s.clone());
new_word_slice.clear();
continue;
}
new_word_slice.push(p[0]);
new = false;
}
}
Ok(pools)
}