aws-lc-sys/builder/sys_bindgen.rs (17 lines of code) (raw):

// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. // SPDX-License-Identifier: Apache-2.0 OR ISC use crate::{get_rust_include_path, BindingOptions, COPYRIGHT}; use bindgen::callbacks::{ItemInfo, ParseCallbacks}; use std::fmt::Debug; use std::path::Path; #[derive(Debug)] struct StripPrefixCallback { remove_prefix: Option<String>, } impl StripPrefixCallback { fn new(prefix: &str) -> StripPrefixCallback { StripPrefixCallback { remove_prefix: Some(prefix.to_string()), } } } impl ParseCallbacks for StripPrefixCallback { fn generated_name_override(&self, item_info: ItemInfo<'_>) -> Option<String> { self.remove_prefix.as_ref().and_then(|s| { let prefix = format!("{s}_"); item_info .name .strip_prefix(prefix.as_str()) .map(String::from) }) } } const PRELUDE: &str = r" #![allow( clippy::cast_lossless, clippy::cast_possible_truncation, clippy::default_trait_access, clippy::must_use_candidate, clippy::not_unsafe_ptr_arg_deref, clippy::ptr_as_ptr, clippy::pub_underscore_fields, clippy::semicolon_if_nothing_returned, clippy::too_many_lines, clippy::unreadable_literal, clippy::used_underscore_binding, clippy::useless_transmute, dead_code, improper_ctypes, non_camel_case_types, non_snake_case, non_upper_case_globals, unused_imports, )] "; fn prepare_bindings_builder(manifest_dir: &Path, options: &BindingOptions) -> bindgen::Builder { let clang_args = crate::prepare_clang_args(manifest_dir, options); let mut builder = bindgen::Builder::default() .derive_copy(true) .derive_debug(true) .derive_default(true) .derive_eq(true) .allowlist_file(r".*(/|\\)openssl((/|\\)[^/\\]+)+\.h") .allowlist_file(r".*(/|\\)rust_wrapper\.h") .rustified_enum(r"point_conversion_form_t") .rust_target(bindgen::RustTarget::Stable_1_59) .default_macro_constant_type(bindgen::MacroTypeVariation::Signed) .generate_comments(true) .fit_macro_constants(false) .size_t_is_usize(true) .layout_tests(true) .prepend_enum_name(true) .formatter(bindgen::Formatter::Rustfmt) .clang_args(clang_args) .raw_line(COPYRIGHT) .header( get_rust_include_path(manifest_dir) .join("rust_wrapper.h") .display() .to_string(), ); if !options.disable_prelude { builder = builder.raw_line(PRELUDE); } if options.include_ssl { builder = builder.clang_arg("-DAWS_LC_RUST_INCLUDE_SSL"); } if let Some(prefix) = &options.build_prefix { let callbacks = StripPrefixCallback::new(prefix.as_str()); builder = builder.parse_callbacks(Box::new(callbacks)); } builder } pub(crate) fn generate_bindings( manifest_dir: &Path, options: &BindingOptions, ) -> bindgen::Bindings { prepare_bindings_builder(manifest_dir, options) .generate() .expect("Unable to generate bindings.") }