| //! A public API for more fine-grained customization of bindgen behavior. |
| |
| pub use ir::enum_ty::{EnumVariantCustomBehavior, EnumVariantValue}; |
| pub use ir::int::IntKind; |
| use std::fmt; |
| use std::panic::UnwindSafe; |
| |
| /// An enum to allow ignoring parsing of macros. |
| #[derive(Copy, Clone, Debug, PartialEq, Eq)] |
| pub enum MacroParsingBehavior { |
| /// Ignore the macro, generating no code for it, or anything that depends on |
| /// it. |
| Ignore, |
| /// The default behavior bindgen would have otherwise. |
| Default, |
| } |
| |
| impl Default for MacroParsingBehavior { |
| fn default() -> Self { |
| MacroParsingBehavior::Default |
| } |
| } |
| |
| /// A trait to allow configuring different kinds of types in different |
| /// situations. |
| pub trait ParseCallbacks: fmt::Debug + UnwindSafe { |
| /// This function will be run on every macro that is identified. |
| fn will_parse_macro(&self, _name: &str) -> MacroParsingBehavior { |
| MacroParsingBehavior::Default |
| } |
| |
| /// The integer kind an integer macro should have, given a name and the |
| /// value of that macro, or `None` if you want the default to be chosen. |
| fn int_macro(&self, _name: &str, _value: i64) -> Option<IntKind> { |
| None |
| } |
| |
| /// This will be run on every string macro. The callback can not influence the further |
| /// treatment of the macro, but may use the value to generate additional code or configuration. |
| fn str_macro(&self, _name: &str, _value: &[u8]) { |
| } |
| |
| /// This function should return whether, given an enum variant |
| /// name, and value, this enum variant will forcibly be a constant. |
| fn enum_variant_behavior( |
| &self, |
| _enum_name: Option<&str>, |
| _original_variant_name: &str, |
| _variant_value: EnumVariantValue, |
| ) -> Option<EnumVariantCustomBehavior> { |
| None |
| } |
| |
| /// Allows to rename an enum variant, replacing `_original_variant_name`. |
| fn enum_variant_name( |
| &self, |
| _enum_name: Option<&str>, |
| _original_variant_name: &str, |
| _variant_value: EnumVariantValue, |
| ) -> Option<String> { |
| None |
| } |
| |
| /// Allows to rename an item, replacing `_original_item_name`. |
| fn item_name(&self, _original_item_name: &str) -> Option<String> { |
| None |
| } |
| } |