miniprot_sys/
lib.rs

1#![allow(non_upper_case_globals)]
2#![allow(non_camel_case_types)]
3#![allow(non_snake_case)]
4
5#[cfg(feature = "bindgen")]
6include!(concat!(env!("OUT_DIR"), "/bindings.rs"));
7
8#[cfg(all(not(feature = "bindgen")))]
9include!("bindings.rs");
10
11use libz_sys::*;
12
13unsafe impl Send for mp_idx_t {}
14unsafe impl Send for mp_mapopt_t {}
15
16use std::mem::MaybeUninit;
17
18impl Default for mp_mapopt_t {
19    fn default() -> Self {
20        unsafe {
21            let mut opt = MaybeUninit::uninit();
22            mp_mapopt_init(opt.as_mut_ptr());
23            opt.assume_init()
24        }
25    }
26}
27
28impl Default for mp_idxopt_t {
29    fn default() -> Self {
30        unsafe {
31            let mut opt = MaybeUninit::uninit();
32            mp_idxopt_init(opt.as_mut_ptr());
33            opt.assume_init()
34        }
35    }
36}
37
38// TODO: Add more tests!
39#[cfg(test)]
40mod tests {
41    use super::*;
42    use std::mem::MaybeUninit;
43
44    #[test]
45    fn test_miniprot() {
46        unsafe {
47            let mut mo = MaybeUninit::uninit();
48            let mut io = MaybeUninit::uninit();
49            // let mut mi: MaybeUninit<*mut mp_idx_t> = MaybeUninit::uninit();
50
51            mp_start(); // Miniprot initialize some things
52            mp_mapopt_init(mo.as_mut_ptr()); // Miniprot initialize map options
53            mp_idxopt_init(io.as_mut_ptr()); // Miniprot initialize index options
54            mp_mapopt_check(mo.as_ptr()); // Miniprot check map options
55
56            let reference = std::ffi::CString::new("miniprot/test/DPP3-hs.gen.fa.gz").unwrap();
57            let query = std::ffi::CString::new("miniprot/test/DPP3-mm.pep.fa.gz").unwrap();
58
59            let mut mi: *mut mp_idx_t = mp_idx_load(reference.as_ptr() as *const i8, io.as_ptr(), 1); // Miniprot initialize index
60
61            let mut mo = mo.assume_init();
62
63            mp_idx_print_stat(mi as *const mp_idx_t, mo.max_occ);
64
65            println!("\n\nMapping results\n\n");
66            mp_map_file(mi as *const mp_idx_t, query.as_ptr() as *const i8, &mo, 1 as i32);
67
68            mp_idx_destroy(mi);
69        }
70    }
71}