openbabel_sys/
lib.rs

1//!  OpenBabel Rust Bindings
2//!
3//!  OBConversion
4//!  ------------
5//! OBConversion_new <-> new OBConversion()
6//! OBConversion_set_in_format <-> OBConversion::SetInFormat
7//! OBConversion_set_out_format <-> OBConversion::SetOutFormat
8//! OBConversion_set_in_and_out_formats <-> OBConversion::SetInAndOutFormats
9//! OBConversion_read_string <-> OBConversion::ReadString
10//! OBConversion_write_string <-> OBConversion::WriteString
11//! OBConversion_read_file <-> OBConversion::ReadFile
12//! OBConversion_write_file <-> OBConversion::WriteFile
13//! OBConversion_get_supported_input_format <-> OBConversion::GetSupportedInputFormat
14//! OBConversion_get_supported_output_format <-> OBConversion::GetSupportedOutputFormat
15//!
16//! OBMol
17//! -----
18//! OBMol_new <-> new OBMol()
19//! OBMol_num_atoms <-> OBMol::NumAtoms
20//! OBMol_num_bonds <-> OBMol::NumBonds
21//! OBMol_num_hvy_atoms <-> OBMol::NumHvyAtoms
22//! OBMol_get_mol_wt <-> OBMol::GetMolWt
23//!
24//! OBForceField
25//! ------------
26//! OBForceField_find_forcefield <-> OBForceField::FindForceField
27//! OBForceField_setup <-> OBForceField::Setup
28//! OBForceField_conjugate_gradients <-> OBForceField::ConjugateGradients
29//! OBForceField_conjugate_gradients_initialize <-> OBForceField::ConjugateGradientsInitialize
30//! OBForceField_conjugate_gradients_take_n_steps <-> OBForceField::ConjugateGradientsTakeNSteps
31//! OBForceField_steepest_descent <-> OBForceField::SteepestDescent
32//! OBForceField_steepest_descent_initialize <-> OBForceField::SteepestDescentInitialize
33//! OBForceField_steepest_descent_take_n_steps <-> OBForceField::SteepestDescentTakeNSteps
34//! OBForceField_energy <-> OBForceField::Energy
35//! OBForceField_is_setup_needed <-> OBForceField::IsSetupNeeded
36//!
37//!  
38//! OBFingerprint
39//! -------------
40//! OBFingerprint_get_fingerprint <-> OBFingerprint::GetFingerprint
41//! 
42//! 
43//! 
44//! OBSmartsPattern
45//! ---------------
46//! 
47//! OBSmartsPattern_from_smarts <-> OBSmartsPattern::Init
48//! OBSmartsPattern_num_atoms <-> OBSmartsPattern::NumAtoms
49//! OBSmartsPattern_num_bonds <-> OBSmartsPattern::NumBonds
50//! OBSmartsPattern_num_matches <-> OBSmartsPattern::NumMatches
51//! OBSmartsPattern_match <-> OBSmartsPattern::Match
52
53#[cxx::bridge(namespace = "OpenBabel")]
54pub mod ob {
55    unsafe extern "C++" {
56        include!("openbabel-sys/src/wrapper.h");
57        type OBMol;
58        type OBSmartsPattern;
59        type OBConversion;
60        type OBForceField;
61
62        // Debug
63        fn print_global_instances();
64
65        // OBConversion
66        // fn OBConversion_smi_to_mol(smiles: &CxxString) -> UniquePtr<OBMol>;
67        fn OBConversion_new() -> UniquePtr<OBConversion>;
68        fn OBConversion_set_in_format(
69            conv: &UniquePtr<OBConversion>,
70            input_format: &CxxString,
71        ) -> bool;
72        fn OBConversion_set_out_format(
73            conv: &UniquePtr<OBConversion>,
74            output_format: &CxxString,
75        ) -> bool;
76        fn OBConversion_set_in_and_out_formats(
77            conv: &UniquePtr<OBConversion>,
78            input_format: &CxxString,
79            output_format: &CxxString,
80        ) -> bool;
81        fn OBConversion_read_string(
82            conv: &UniquePtr<OBConversion>,
83            mol: &UniquePtr<OBMol>,
84            input: &CxxString,
85        ) -> bool;
86        fn OBConversion_write_string(
87            conv: &UniquePtr<OBConversion>,
88            mol: &UniquePtr<OBMol>,
89        ) -> String;
90        fn OBConversion_read_file(
91            conv: &UniquePtr<OBConversion>,
92            mol: &UniquePtr<OBMol>,
93            input_path: &CxxString,
94        ) -> bool;
95        fn OBConversion_write_file(
96            conv: &UniquePtr<OBConversion>,
97            mol: &UniquePtr<OBMol>,
98            output_path: &CxxString,
99        ) -> bool;
100        fn OBConversion_get_supported_input_format() -> Vec<String>;
101        fn OBConversion_get_supported_output_format() -> Vec<String>;
102
103        // OBForceField
104        fn OBForceField_find_forcefield(ff_name: &CxxString) -> UniquePtr<OBForceField>;
105        fn OBForceField_setup(mol: &UniquePtr<OBMol>, pFF: &UniquePtr<OBForceField>) -> u32;
106        fn OBForceField_conjugate_gradients(pFF: &UniquePtr<OBForceField>, steps: u32, econv: f64);
107        fn OBForceField_conjugate_gradients_initialize(
108            pFF: &UniquePtr<OBForceField>,
109            steps: u32,
110            econv: f64,
111        );
112        fn OBForceField_conjugate_gradients_take_n_steps(
113            pFF: &UniquePtr<OBForceField>,
114            n: u32,
115        ) -> bool;
116        fn OBForceField_steepest_descent(pFF: &UniquePtr<OBForceField>, steps: u32, econv: f64);
117        fn OBForceField_steepest_descent_initialize(
118            pFF: &UniquePtr<OBForceField>,
119            steps: u32,
120            econv: f64,
121        );
122        fn OBForceField_steepest_descent_take_n_steps(
123            pFF: &UniquePtr<OBForceField>,
124            n: u32,
125        ) -> bool;
126        fn OBForceField_energy(pFF: &UniquePtr<OBForceField>) -> f64;
127        fn OBForceField_is_setup_needed(
128            pFF: &UniquePtr<OBForceField>,
129            mol: &UniquePtr<OBMol>,
130        ) -> bool;
131
132        // OBMol
133        fn OBMol_new() -> UniquePtr<OBMol>;
134        fn OBMol_from_smiles(smiles: &CxxString) -> UniquePtr<OBMol>;
135        fn OBMol_num_atoms(mol: &UniquePtr<OBMol>) -> u32;
136        fn OBMol_num_bonds(mol: &UniquePtr<OBMol>) -> u32;
137        fn OBMol_num_hvy_atoms(mol: &UniquePtr<OBMol>) -> u32;
138        fn OBMol_get_mol_wt(mol: &UniquePtr<OBMol>) -> f64;
139
140        // OBFingerprint
141        fn OBFingerprint_get_fingerprint(fp_name: &CxxString, mol: &UniquePtr<OBMol>, nbits: u32) -> UniquePtr<CxxVector<u32>>;
142
143        // OBSmartsPattern
144        fn OBSmartsPattern_from_smarts(smarts: &CxxString) -> UniquePtr<OBSmartsPattern>;
145        fn OBSmartsPattern_num_atoms(pattern: &UniquePtr<OBSmartsPattern>) -> u32;
146        fn OBSmartsPattern_num_bonds(pattern: &UniquePtr<OBSmartsPattern>) -> u32;
147        fn OBSmartsPattern_num_matches(pattern: &UniquePtr<OBSmartsPattern>) -> u32;
148        fn OBSmartsPattern_match(pattern: &UniquePtr<OBSmartsPattern>, mol: &UniquePtr<OBMol>) -> UniquePtr<CxxVector<i32>>;
149    }
150}
151
152
153mod tests;