spoa_sys/
lib.rs

1#[cxx::bridge(namespace = "spoa")]
2pub mod ffi {
3    /// Enumerates the possible alignment types
4    #[repr(u32)]
5    enum AlignmentType {
6        /// Smith-Waterman alignment
7        kSW,
8        /// Needleman-Wunsch alignment
9        kNW,
10        /// Overlap alignment
11        kOV,
12    }
13
14    unsafe extern "C++" {
15        include!("spoa-sys/include/bindings.hpp");
16
17        type Alignment;
18        type AlignmentEngine;
19        type AlignmentType;
20        type Graph;
21
22        fn create_graph() -> UniquePtr<Graph>;
23        /// # Safety
24        /// this function is unsafe because cxx says pointer arguments are unsafe
25        unsafe fn add_alignment_with_qual(
26            graph: Pin<&mut Graph>,
27            alignment: &Alignment,
28            sequence: *const c_char,
29            sequence_len: u32,
30            quality: *const c_char,
31            quality_len: u32,
32        );
33        unsafe fn add_alignment(
34            graph: Pin<&mut Graph>,
35            alignment: &Alignment,
36            sequence: *const c_char,
37            sequence_len: u32,
38            weight: u32,
39        );
40        fn generate_consensus(graph: Pin<&mut Graph>) -> UniquePtr<CxxString>;
41        fn generate_consensus_with_min_coverage(
42            graph: Pin<&mut Graph>,
43            min_coverage: i32,
44        ) -> UniquePtr<CxxString>;
45        fn generate_multiple_sequence_alignment(
46            graph: Pin<&mut Graph>,
47            include_consensus: bool,
48        ) -> UniquePtr<CxxVector<CxxString>>;
49        fn graph_clear(graph: Pin<&mut Graph>);
50
51        fn create_alignment_engine(
52            typ: AlignmentType,
53            m: i8,
54            n: i8,
55            g: i8,
56            e: i8,
57            q: i8,
58            c: i8,
59        ) -> UniquePtr<AlignmentEngine>;
60        /// # Safety
61        /// this function is unsafe because cxx says pointer arguments are unsafe
62        unsafe fn align(
63            alignment_engine: Pin<&mut AlignmentEngine>,
64            sequence: *const c_char,
65            sequence_len: u32,
66            graph: &Graph,
67        ) -> UniquePtr<Alignment>;
68    }
69}