1 //! SQLite bindgen configuration
2 
3 use bindgen::callbacks::{IntKind, ParseCallbacks};
4 
5 #[derive(Debug)]
6 struct SqliteTypeChooser;
7 
8 impl ParseCallbacks for SqliteTypeChooser {
int_macro(&self, _name: &str, value: i64) -> Option<IntKind>9     fn int_macro(&self, _name: &str, value: i64) -> Option<IntKind> {
10         if value >= i32::MIN as i64 && value <= i32::MAX as i64 {
11             Some(IntKind::I32)
12         } else {
13             None
14         }
15     }
16 }
17 
main()18 fn main() {
19     bindgen_cmd::build(|mut builder| {
20         builder = builder
21             .parse_callbacks(Box::new(SqliteTypeChooser))
22             .rustfmt_bindings(true)
23             .blocklist_function("sqlite3_vmprintf")
24             .blocklist_function("sqlite3_vsnprintf")
25             .blocklist_function("sqlite3_str_vappendf")
26             .blocklist_type("va_list")
27             .blocklist_type("__builtin_va_list")
28             .blocklist_type("__gnuc_va_list")
29             .blocklist_type("__va_list_tag")
30             .blocklist_item("__GNUC_VA_LIST");
31 
32         if cfg!(feature = "unlock_notify") {
33             builder = builder.clang_arg("-DSQLITE_ENABLE_UNLOCK_NOTIFY");
34         }
35         if cfg!(feature = "preupdate_hook") {
36             builder = builder.clang_arg("-DSQLITE_ENABLE_PREUPDATE_HOOK");
37         }
38         if cfg!(feature = "session") {
39             builder = builder.clang_arg("-DSQLITE_ENABLE_SESSION");
40         }
41 
42         builder
43     })
44 }
45