1 #![allow(non_camel_case_types, non_upper_case_globals, non_snake_case)]
2 
3 extern crate libc;
4 
5 use libc::{c_char, c_int, c_uchar, c_void};
6 use libc::size_t;
7 
8 // These are opaque types that LevelDB uses.
9 pub enum leveldb_t {}
10 pub enum leveldb_cache_t {}
11 pub enum leveldb_comparator_t {}
12 pub enum leveldb_env_t {}
13 pub enum leveldb_filelock_t {}
14 pub enum leveldb_filterpolicy_t {}
15 pub enum leveldb_iterator_t {}
16 pub enum leveldb_logger_t {}
17 pub enum leveldb_options_t {}
18 pub enum leveldb_randomfile_t {}
19 pub enum leveldb_readoptions_t {}
20 pub enum leveldb_seqfile_t {}
21 pub enum leveldb_snapshot_t {}
22 pub enum leveldb_writablefile_t {}
23 pub enum leveldb_writebatch_t {}
24 pub enum leveldb_writeoptions_t {}
25 
26 #[repr(C)]
27 #[derive(Copy,Clone)]
28 pub enum Compression {
29   No = 0,
30   Snappy = 1
31 }
32 
33 extern "C" {
34     // DB operations
leveldb_open(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char) -> *mut leveldb_t35     pub fn leveldb_open(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char) -> *mut leveldb_t;
leveldb_close(db: *mut leveldb_t)36     pub fn leveldb_close(db: *mut leveldb_t);
leveldb_put(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char)37     pub fn leveldb_put(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t, errptr: *mut *mut c_char);
leveldb_delete(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, key: *const c_char, keylen: size_t, errptr: *mut *mut c_char)38     pub fn leveldb_delete(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, key: *const c_char, keylen: size_t, errptr: *mut *mut c_char);
leveldb_write(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, batch: *mut leveldb_writebatch_t, errptr: *mut *mut c_char)39     pub fn leveldb_write(db: *mut leveldb_t, options: *const leveldb_writeoptions_t, batch: *mut leveldb_writebatch_t, errptr: *mut *mut c_char);
leveldb_get(db: *mut leveldb_t, options: *const leveldb_readoptions_t, key: *const c_char, keylen: size_t, vallen: *mut size_t, errptr: *mut *mut c_char) -> *mut c_char40     pub fn leveldb_get(db: *mut leveldb_t, options: *const leveldb_readoptions_t, key: *const c_char, keylen: size_t, vallen: *mut size_t, errptr: *mut *mut c_char) -> *mut c_char;
leveldb_create_iterator(db: *mut leveldb_t, options: *const leveldb_readoptions_t) -> *mut leveldb_iterator_t41     pub fn leveldb_create_iterator(db: *mut leveldb_t, options: *const leveldb_readoptions_t) -> *mut leveldb_iterator_t;
leveldb_create_snapshot(db: *mut leveldb_t) -> *mut leveldb_snapshot_t42     pub fn leveldb_create_snapshot(db: *mut leveldb_t) -> *mut leveldb_snapshot_t;
leveldb_release_snapshot(db: *mut leveldb_t, snapshot: *const leveldb_snapshot_t)43     pub fn leveldb_release_snapshot(db: *mut leveldb_t, snapshot: *const leveldb_snapshot_t);
leveldb_property_value(db: *mut leveldb_t, propname: *const c_char) -> *mut c_char44     pub fn leveldb_property_value(db: *mut leveldb_t, propname: *const c_char) -> *mut c_char;
45 
46     // TODO: const'ness of pointers here is in question
leveldb_approximate_sizes(db: *mut leveldb_t, num_ranges: c_int, range_start_key: *const *const c_char, range_start_key_len: *const size_t, range_limit_key: *const *const c_char, range_limit_key_len: *const size_t, sizes: *mut u64)47     pub fn leveldb_approximate_sizes(db: *mut leveldb_t, num_ranges: c_int, range_start_key: *const *const c_char, range_start_key_len: *const size_t, range_limit_key: *const *const c_char, range_limit_key_len: *const size_t, sizes: *mut u64);
leveldb_compact_range(db: *mut leveldb_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t)48     pub fn leveldb_compact_range(db: *mut leveldb_t, start_key: *const c_char, start_key_len: size_t, limit_key: *const c_char, limit_key_len: size_t);
49 
50     // Management operations
leveldb_destroy_db(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char)51     pub fn leveldb_destroy_db(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char);
leveldb_repair_db(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char)52     pub fn leveldb_repair_db(options: *const leveldb_options_t, name: *const c_char, errptr: *mut *mut c_char);
53 
54     // Iterator
leveldb_iter_destroy(it: *mut leveldb_iterator_t)55     pub fn leveldb_iter_destroy(it: *mut leveldb_iterator_t);
leveldb_iter_valid(it: *const leveldb_iterator_t) -> c_uchar56     pub fn leveldb_iter_valid(it: *const leveldb_iterator_t) -> c_uchar;
leveldb_iter_seek_to_first(it: *mut leveldb_iterator_t)57     pub fn leveldb_iter_seek_to_first(it: *mut leveldb_iterator_t);
leveldb_iter_seek_to_last(it: *mut leveldb_iterator_t)58     pub fn leveldb_iter_seek_to_last(it: *mut leveldb_iterator_t);
leveldb_iter_seek(it: *mut leveldb_iterator_t, k: *const c_char, klen: size_t)59     pub fn leveldb_iter_seek(it: *mut leveldb_iterator_t, k: *const c_char, klen: size_t);
leveldb_iter_next(it: *mut leveldb_iterator_t)60     pub fn leveldb_iter_next(it: *mut leveldb_iterator_t);
leveldb_iter_prev(it: *mut leveldb_iterator_t)61     pub fn leveldb_iter_prev(it: *mut leveldb_iterator_t);
leveldb_iter_key(it: *const leveldb_iterator_t, klen: *const size_t) -> *const c_char62     pub fn leveldb_iter_key(it: *const leveldb_iterator_t, klen: *const size_t) -> *const c_char;
leveldb_iter_value(it: *const leveldb_iterator_t, vlen: *const size_t) -> *const c_char63     pub fn leveldb_iter_value(it: *const leveldb_iterator_t, vlen: *const size_t) -> *const c_char;
leveldb_iter_get_error(it: *const leveldb_iterator_t, errptr: *const *const c_char)64     pub fn leveldb_iter_get_error(it: *const leveldb_iterator_t, errptr: *const *const c_char);
65 
66     // Write batch
leveldb_writebatch_create() -> *mut leveldb_writebatch_t67     pub fn leveldb_writebatch_create() -> *mut leveldb_writebatch_t;
leveldb_writebatch_destroy(b: *mut leveldb_writebatch_t)68     pub fn leveldb_writebatch_destroy(b: *mut leveldb_writebatch_t);
leveldb_writebatch_clear(b: *mut leveldb_writebatch_t)69     pub fn leveldb_writebatch_clear(b: *mut leveldb_writebatch_t);
leveldb_writebatch_put(b: *mut leveldb_writebatch_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t)70     pub fn leveldb_writebatch_put(b: *mut leveldb_writebatch_t, key: *const c_char, keylen: size_t, val: *const c_char, vallen: size_t);
leveldb_writebatch_delete(b: *mut leveldb_writebatch_t, key: *const c_char, keylen: size_t)71     pub fn leveldb_writebatch_delete(b: *mut leveldb_writebatch_t, key: *const c_char, keylen: size_t);
leveldb_writebatch_iterate( b: *mut leveldb_writebatch_t, state: *mut c_void, put: extern fn(*mut c_void, *const c_char, size_t, *const c_char, size_t), deleted: extern fn(*mut c_void, *const c_char, size_t) )72     pub fn leveldb_writebatch_iterate(
73         b: *mut leveldb_writebatch_t,
74         state: *mut c_void,
75         put: extern fn(*mut c_void, *const c_char, size_t, *const c_char, size_t),
76         deleted: extern fn(*mut c_void, *const c_char, size_t)
77     );
78 
79     // Options
leveldb_options_create() -> *mut leveldb_options_t80     pub fn leveldb_options_create() -> *mut leveldb_options_t;
leveldb_options_destroy(o: *mut leveldb_options_t)81     pub fn leveldb_options_destroy(o: *mut leveldb_options_t);
leveldb_options_set_comparator(o: *mut leveldb_options_t, c: *mut leveldb_comparator_t)82     pub fn leveldb_options_set_comparator(o: *mut leveldb_options_t, c: *mut leveldb_comparator_t);
leveldb_options_set_filter_policy(o: *mut leveldb_options_t, c: *mut leveldb_filterpolicy_t)83     pub fn leveldb_options_set_filter_policy(o: *mut leveldb_options_t, c: *mut leveldb_filterpolicy_t);
leveldb_options_set_create_if_missing(o: *mut leveldb_options_t, val: c_uchar)84     pub fn leveldb_options_set_create_if_missing(o: *mut leveldb_options_t, val: c_uchar);
leveldb_options_set_error_if_exists(o: *mut leveldb_options_t, val: c_uchar)85     pub fn leveldb_options_set_error_if_exists(o: *mut leveldb_options_t, val: c_uchar);
leveldb_options_set_paranoid_checks(o: *mut leveldb_options_t, val: c_uchar)86     pub fn leveldb_options_set_paranoid_checks(o: *mut leveldb_options_t, val: c_uchar);
leveldb_options_set_env(o: *mut leveldb_options_t, env: *mut leveldb_env_t)87     pub fn leveldb_options_set_env(o: *mut leveldb_options_t, env: *mut leveldb_env_t);
leveldb_options_set_info_log(o: *mut leveldb_options_t, logger: *mut leveldb_logger_t)88     pub fn leveldb_options_set_info_log(o: *mut leveldb_options_t, logger: *mut leveldb_logger_t);
leveldb_options_set_write_buffer_size(o: *mut leveldb_options_t, size: size_t)89     pub fn leveldb_options_set_write_buffer_size(o: *mut leveldb_options_t, size: size_t);
leveldb_options_set_max_open_files(o: *mut leveldb_options_t, num: c_int)90     pub fn leveldb_options_set_max_open_files(o: *mut leveldb_options_t, num: c_int);
leveldb_options_set_cache(o: *mut leveldb_options_t, cache: *mut leveldb_cache_t)91     pub fn leveldb_options_set_cache(o: *mut leveldb_options_t, cache: *mut leveldb_cache_t);
leveldb_options_set_block_size(o: *mut leveldb_options_t, size: size_t)92     pub fn leveldb_options_set_block_size(o: *mut leveldb_options_t, size: size_t);
leveldb_options_set_block_restart_interval(o: *mut leveldb_options_t, interval: c_int)93     pub fn leveldb_options_set_block_restart_interval(o: *mut leveldb_options_t, interval: c_int);
leveldb_options_set_compression(o: *mut leveldb_options_t, val: Compression)94     pub fn leveldb_options_set_compression(o: *mut leveldb_options_t, val: Compression);
95 
96     // Comparator
leveldb_comparator_create( state: *mut c_void, destructor: extern fn(*mut c_void), compare: extern fn(*mut c_void, *const c_char, size_t, *const c_char, size_t) -> c_int, name: extern fn(*mut c_void) -> *const c_char ) -> *mut leveldb_comparator_t97     pub fn leveldb_comparator_create(
98         state: *mut c_void,
99         destructor: extern fn(*mut c_void),
100         compare: extern fn(*mut c_void, *const c_char, size_t, *const c_char, size_t) -> c_int,
101         name: extern fn(*mut c_void) -> *const c_char
102     ) -> *mut leveldb_comparator_t;
leveldb_comparator_destroy(c: *mut leveldb_comparator_t)103     pub fn leveldb_comparator_destroy(c: *mut leveldb_comparator_t);
104 
105     // Filter policy
106     //pub leveldb_filterpolicy_create(state: *mut c_void, /* TODO */) -> *mut leveldb_filterpolicy_t;
107     /*
108         extern leveldb_filterpolicy_t* leveldb_filterpolicy_create(
109             void* state,
110             void (*destructor)(void*),
111             char* (*create_filter)(
112                 void*,
113                 const char* const* key_array, const size_t* key_length_array,
114                 int num_keys,
115                 size_t* filter_length),
116             unsigned char (*key_may_match)(
117                 void*,
118                 const char* key, size_t length,
119                 const char* filter, size_t filter_length),
120             const char* (*name)(void*));
121     */
leveldb_filterpolicy_destroy(p: *mut leveldb_filterpolicy_t)122     pub fn leveldb_filterpolicy_destroy(p: *mut leveldb_filterpolicy_t);
leveldb_filterpolicy_create_bloom(bits_per_key: c_int) -> *mut leveldb_filterpolicy_t123     pub fn leveldb_filterpolicy_create_bloom(bits_per_key: c_int) -> *mut leveldb_filterpolicy_t;
124 
125     // Read options
leveldb_readoptions_create() -> *mut leveldb_readoptions_t126     pub fn leveldb_readoptions_create() -> *mut leveldb_readoptions_t;
leveldb_readoptions_destroy(o: *mut leveldb_readoptions_t)127     pub fn leveldb_readoptions_destroy(o: *mut leveldb_readoptions_t);
leveldb_readoptions_set_verify_checksums(o: *mut leveldb_readoptions_t, val: c_uchar)128     pub fn leveldb_readoptions_set_verify_checksums(o: *mut leveldb_readoptions_t, val: c_uchar);
leveldb_readoptions_set_fill_cache(o: *mut leveldb_readoptions_t, val: c_uchar)129     pub fn leveldb_readoptions_set_fill_cache(o: *mut leveldb_readoptions_t, val: c_uchar);
leveldb_readoptions_set_snapshot(o: *mut leveldb_readoptions_t, snapshot: *const leveldb_snapshot_t)130     pub fn leveldb_readoptions_set_snapshot(o: *mut leveldb_readoptions_t, snapshot: *const leveldb_snapshot_t);
131 
132     // Write options
leveldb_writeoptions_create() -> *mut leveldb_writeoptions_t133     pub fn leveldb_writeoptions_create() -> *mut leveldb_writeoptions_t;
leveldb_writeoptions_destroy(o: *mut leveldb_writeoptions_t)134     pub fn leveldb_writeoptions_destroy(o: *mut leveldb_writeoptions_t);
leveldb_writeoptions_set_sync(o: *mut leveldb_writeoptions_t, val: c_uchar)135     pub fn leveldb_writeoptions_set_sync(o: *mut leveldb_writeoptions_t, val: c_uchar);
136 
137     // Cache
leveldb_cache_create_lru(capacity: size_t) -> *mut leveldb_cache_t138     pub fn leveldb_cache_create_lru(capacity: size_t) -> *mut leveldb_cache_t;
leveldb_cache_destroy(c: *mut leveldb_cache_t)139     pub fn leveldb_cache_destroy(c: *mut leveldb_cache_t);
140 
141     // Env
leveldb_create_default_env() -> *mut leveldb_env_t142     pub fn leveldb_create_default_env() -> *mut leveldb_env_t;
leveldb_env_destroy(e: *mut leveldb_env_t)143     pub fn leveldb_env_destroy(e: *mut leveldb_env_t);
144 
145     // Utility
leveldb_free(ptr: *mut c_void)146     pub fn leveldb_free(ptr: *mut c_void);
147 
148     // Versioning
leveldb_major_version() -> c_int149     pub fn leveldb_major_version() -> c_int;
leveldb_minor_version() -> c_int150     pub fn leveldb_minor_version() -> c_int;
151 }
152