1#[cxx::bridge(namespace = "spoa")]
2pub mod ffi {
3 #[repr(u32)]
5 enum AlignmentType {
6 kSW,
8 kNW,
10 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 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 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}