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()18fn 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