use libc::{self, c_void, size_t};
use std::ops::Deref;
use std::slice;
use std::str;
pub struct DBVector {
base: *mut u8,
len: usize,
}
impl Deref for DBVector {
type Target = [u8];
fn deref(&self) -> &[u8] {
unsafe { slice::from_raw_parts(self.base, self.len) }
}
}
impl AsRef<[u8]> for DBVector {
fn as_ref(&self) -> &[u8] {
self
}
}
impl Drop for DBVector {
fn drop(&mut self) {
unsafe {
ffi::rocksdb_free(self.base as *mut c_void);
}
}
}
impl DBVector {
pub unsafe fn from_c(val: *mut u8, val_len: size_t) -> DBVector {
DBVector {
base: val,
len: val_len,
}
}
pub fn to_utf8(&self) -> Option<&str> {
str::from_utf8(self.deref()).ok()
}
}