rdkit_ffi/
lib.rs

1#[cxx::bridge(namespace = "RDKit")]
2pub mod rd {
3    unsafe extern "C++" {
4        include!("rdkit-ffi/src/wrapper.h");
5
6        // SmilesParse
7        fn SmilesParse_smi_to_mol(smiles: &CxxString) -> SharedPtr<RWMol>;
8
9        // RWmol
10        type RWMol;
11        fn RWMol_get_num_atoms(mol: &SharedPtr<RWMol>) -> u32;
12        fn RWMol_get_num_heavy_atoms(mol: &SharedPtr<RWMol>) -> u32;
13        fn RWMol_get_num_bonds(mol: &SharedPtr<RWMol>) -> u32;
14        type ROMolPtrVec;
15        fn ROMolPtrVec_new() -> UniquePtr<ROMolPtrVec>;
16        fn ROMolPtrVec_emplace_back(mols: &UniquePtr<ROMolPtrVec>, mol: &SharedPtr<RWMol>);
17        fn ROMolPtrVec_ptrs_count(mols: &UniquePtr<ROMolPtrVec>) -> u32;
18        fn ROMolPtrVec_first_ptr_atom_count(mols: &UniquePtr<ROMolPtrVec>, index: usize) -> u32;
19
20        // MorganFingerprint
21        type MorganFingerprint;
22        fn MorganFP_get_fingerprint(mol: &SharedPtr<RWMol>, radius: u32, useChirality: bool, useBondTypes: bool, useCounts: bool, onlyNonzeroInvariants: bool, includeRedundantEnvironments: bool) -> UniquePtr<MorganFingerprint>;
23        fn MorganFP_get_nonzero_elements_size(mfp: &UniquePtr<MorganFingerprint>) -> usize;
24
25        // FMCS
26        type MCSResult;
27        fn FMCS_find_mcs(mols: &UniquePtr<ROMolPtrVec>) -> UniquePtr<MCSResult>;
28        fn MCSResult_num_atoms(mcsr: &UniquePtr<MCSResult>) -> u32;
29        fn MCSResult_num_bonds(mcsr: &UniquePtr<MCSResult>) -> u32;
30        fn MCSResult_smarts_string(mcsr: &UniquePtr<MCSResult>) -> &CxxString;
31    }
32}