rs-leveldb 0.1.5

Almost-complete bindings for leveldb for Rust.
Documentation
use super::error::Error;

pub trait IntoLevelDBKey {
    fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error>;
    fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error>;
}

impl IntoLevelDBKey for &[u8] {
    fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
        f(self)
    }

    fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error> {
        f(self)
    }
}

impl IntoLevelDBKey for &str {
    fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
        f(self.as_bytes())
    }

    fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error> {
        f(self.as_bytes())
    }
}

impl IntoLevelDBKey for String {
    fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
        f(self.as_bytes())
    }

    fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error> {
        f(self.as_bytes())
    }
}

impl IntoLevelDBKey for Vec<u8> {
    fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
        f(self.as_slice())
    }

    fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error> {
        f(self.as_slice())
    }
}

macro_rules! impl_into_level_db_key_for_integer {
    ($T: ty) => {
       impl IntoLevelDBKey for $T {
         fn as_u8_slice_for_write(&self, f: &dyn Fn(&[u8]) -> Result<(), Error>) -> Result<(), Error> {
             f(&self.to_be_bytes()[..])
         }

         fn as_u8_slice_for_get(&self, f: &dyn Fn(&[u8]) ->  Result<Option<Vec<u8>>, Error>) ->  Result<Option<Vec<u8>>, Error> {
             f(&self.to_be_bytes()[..])
         }
       }
    };
}


impl_into_level_db_key_for_integer!(i8);
impl_into_level_db_key_for_integer!(i16);
impl_into_level_db_key_for_integer!(i32);
impl_into_level_db_key_for_integer!(i64);
impl_into_level_db_key_for_integer!(i128);
impl_into_level_db_key_for_integer!(u8);
impl_into_level_db_key_for_integer!(u16);
impl_into_level_db_key_for_integer!(u32);
impl_into_level_db_key_for_integer!(u64);
impl_into_level_db_key_for_integer!(u128);