summaryrefslogtreecommitdiff
path: root/bindgen-tests/tests/parse_callbacks/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'bindgen-tests/tests/parse_callbacks/mod.rs')
-rw-r--r--bindgen-tests/tests/parse_callbacks/mod.rs42
1 files changed, 42 insertions, 0 deletions
diff --git a/bindgen-tests/tests/parse_callbacks/mod.rs b/bindgen-tests/tests/parse_callbacks/mod.rs
new file mode 100644
index 00000000..b94b54de
--- /dev/null
+++ b/bindgen-tests/tests/parse_callbacks/mod.rs
@@ -0,0 +1,42 @@
+use bindgen::callbacks::*;
+
+#[derive(Debug)]
+struct EnumVariantRename;
+
+impl ParseCallbacks for EnumVariantRename {
+ fn enum_variant_name(
+ &self,
+ _enum_name: Option<&str>,
+ original_variant_name: &str,
+ _variant_value: EnumVariantValue,
+ ) -> Option<String> {
+ Some(format!("RENAMED_{}", original_variant_name))
+ }
+}
+
+#[derive(Debug)]
+struct BlocklistedTypeImplementsTrait;
+
+impl ParseCallbacks for BlocklistedTypeImplementsTrait {
+ fn blocklisted_type_implements_trait(
+ &self,
+ _name: &str,
+ derive_trait: DeriveTrait,
+ ) -> Option<ImplementsTrait> {
+ if derive_trait == DeriveTrait::Hash {
+ Some(ImplementsTrait::No)
+ } else {
+ Some(ImplementsTrait::Yes)
+ }
+ }
+}
+
+pub fn lookup(cb: &str) -> Box<dyn ParseCallbacks> {
+ match cb {
+ "enum-variant-rename" => Box::new(EnumVariantRename),
+ "blocklisted-type-implements-trait" => {
+ Box::new(BlocklistedTypeImplementsTrait)
+ }
+ _ => panic!("Couldn't find name ParseCallbacks: {}", cb),
+ }
+}