1#![allow(non_upper_case_globals)]
5#![allow(non_camel_case_types)]
6#![allow(non_snake_case)]
7
8include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
10
11pub const KEY_END: *const std::ffi::c_void = std::ptr::null();
12pub const KS_END: *const std::ffi::c_void = std::ptr::null();
13
14#[cfg(test)]
15mod tests {
16 use super::{
17 keyDel, keyName, keyNew, keyString, ksAppendKey, ksDel, ksNew, ksAtCursor, Key,
18 KEY_END, KEY_VALUE,
19 };
20 use std::ffi::{CStr, CString};
21
22 #[test]
23 fn can_write_read_key() {
24 let key_name = CString::new("user:/test/key").unwrap();
25 let key_val = CString::new("rust-bindings").unwrap();
26 let key = unsafe { keyNew(key_name.as_ptr(), KEY_VALUE, key_val.as_ptr(), KEY_END) };
27 let ret_val_str = unsafe { CStr::from_ptr(keyString(key)) };
28 assert_eq!(ret_val_str, key_val.as_c_str());
29 assert_eq!(unsafe { keyDel(key) }, 0);
30 }
31
32 #[test]
33 fn can_iterate_keyset() {
34 let key_name = CString::new("user:/test/key").unwrap();
35 let key_name2 = CString::new("user:/test/key2").unwrap();
36
37 let key = unsafe { keyNew(key_name.as_ptr(), KEY_END) };
38 let key2 = unsafe { keyNew(key_name2.as_ptr(), KEY_END) };
39 let ks = unsafe { ksNew(2) };
40
41 let mut append_res = unsafe { ksAppendKey(ks, key) };
42 assert_eq!(append_res, 1);
43
44 append_res = unsafe { ksAppendKey(ks, key2) };
45 assert_eq!(append_res, 2);
46
47 let mut key_next = unsafe { ksAtCursor(ks, 0) };
48 assert_eq!(key_name.as_c_str(), unsafe {
49 CStr::from_ptr(keyName(key_next))
50 });
51
52 key_next = unsafe { ksAtCursor(ks, 1) };
53 assert_eq!(key_name2.as_c_str(), unsafe {
54 CStr::from_ptr(keyName(key_next))
55 });
56
57 key_next = unsafe { ksAtCursor(ks, 2) };
58 let key_next_ptr: *const Key = key_next;
59 assert!(key_next_ptr.is_null());
60
61 assert_eq!(unsafe { ksDel(ks) }, 0);
63 }
64
65}