kyotocabinet 0.0.2

Kyotocabinet binding
Documentation
extern crate kyotocabinet;

#[cfg(test)]
mod tests {
    use kyotocabinet as kc;
    use std::ffi::CString;
    use std::ffi::CStr;
    use std::str;
    
    #[test]
    fn test_new_del_open_db() {
        let path = CString::new("/tmp/foo.kch")
            .expect("Cannot new CString");
         unsafe {
             let db = kc::kcdbnew();
             let ret = kc::kcdbopen(db,
                                    path.as_ptr(),
                                    kc::Mode::WRITER as u32 |
                                    kc::Mode::CREATE as u32);
             assert!(ret != 0);
             kc::kcdbclose(db);
             kc::kcdbdel(db);
         }
    }
    
    #[test]
    fn test_set() {
        let path = CString::new("/tmp/foo.kch")
            .expect("Cannot new CString");
        let key = CString::new("key")
            .expect("Cannot new key");
        let val = CString::new("value")
            .expect("Cannot new value");
        let mut sp: usize = 0;
        unsafe {
            let db = kc::kcdbnew();
            let ret = kc::kcdbopen(db,
                                   path.as_ptr(),
                                   kc::Mode::WRITER as u32 |
                                   kc::Mode::CREATE as u32);
            assert!(ret != 0);
            kc::kcdbset(db, key.as_ptr(), 3, val.as_ptr(), 5);
            let c_val = kc::kcdbget(db, key.as_ptr(), 3, &mut sp);
            assert!(sp == 5);
            assert!(!c_val.is_null());
            let _val = str::from_utf8(CStr::from_ptr(c_val)
                                      .to_bytes())
                .unwrap();
            assert!(_val == "value");
            kc::kcdbclose(db);
            kc::kcdbdel(db);
         }
    }
}