use libc::{c_void, c_char};
use leveldb_sys::leveldb_free;
use std;
#[derive(Debug)]
pub struct Error {
message: String,
}
impl Error {
pub fn new(message: String) -> Error {
Error { message: message }
}
pub unsafe fn new_from_char(message: *const c_char) -> Error {
use std::str::from_utf8;
use std::ffi::CStr;
let err_string = from_utf8(CStr::from_ptr(message).to_bytes()).unwrap().to_string();
leveldb_free(message as *mut c_void);
Error::new(err_string)
}
}
impl std::fmt::Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, "LevelDB error: {}", self.message)
}
}
impl std::error::Error for Error {
fn description(&self) -> &str {
&self.message
}
fn cause(&self) -> Option<&dyn std::error::Error> {
None
}
}