112a9d9c8Sopenharmony_ciuse bindgen::callbacks::*; 212a9d9c8Sopenharmony_ci 312a9d9c8Sopenharmony_ci#[derive(Debug)] 412a9d9c8Sopenharmony_cipub struct RemovePrefixParseCallback { 512a9d9c8Sopenharmony_ci pub remove_prefix: Option<String>, 612a9d9c8Sopenharmony_ci} 712a9d9c8Sopenharmony_ci 812a9d9c8Sopenharmony_ciimpl RemovePrefixParseCallback { 912a9d9c8Sopenharmony_ci pub fn new(prefix: &str) -> Self { 1012a9d9c8Sopenharmony_ci RemovePrefixParseCallback { 1112a9d9c8Sopenharmony_ci remove_prefix: Some(prefix.to_string()), 1212a9d9c8Sopenharmony_ci } 1312a9d9c8Sopenharmony_ci } 1412a9d9c8Sopenharmony_ci} 1512a9d9c8Sopenharmony_ci 1612a9d9c8Sopenharmony_ciimpl ParseCallbacks for RemovePrefixParseCallback { 1712a9d9c8Sopenharmony_ci fn generated_name_override(&self, item_info: ItemInfo) -> Option<String> { 1812a9d9c8Sopenharmony_ci if let Some(prefix) = &self.remove_prefix { 1912a9d9c8Sopenharmony_ci let (expected_prefix, expected_suffix) = match item_info.kind { 2012a9d9c8Sopenharmony_ci ItemKind::Function => ("function_", "_name"), 2112a9d9c8Sopenharmony_ci ItemKind::Var => ("var_", "_name"), 2212a9d9c8Sopenharmony_ci _ => todo!(), 2312a9d9c8Sopenharmony_ci }; 2412a9d9c8Sopenharmony_ci if let Some(name) = item_info.name.strip_prefix(prefix) { 2512a9d9c8Sopenharmony_ci assert!(name.starts_with(expected_prefix)); 2612a9d9c8Sopenharmony_ci assert!(name.ends_with(expected_suffix)); 2712a9d9c8Sopenharmony_ci return Some(name.to_string()); 2812a9d9c8Sopenharmony_ci } 2912a9d9c8Sopenharmony_ci } 3012a9d9c8Sopenharmony_ci None 3112a9d9c8Sopenharmony_ci } 3212a9d9c8Sopenharmony_ci} 3312a9d9c8Sopenharmony_ci 3412a9d9c8Sopenharmony_ci#[derive(Debug)] 3512a9d9c8Sopenharmony_cistruct EnumVariantRename; 3612a9d9c8Sopenharmony_ci 3712a9d9c8Sopenharmony_ciimpl ParseCallbacks for EnumVariantRename { 3812a9d9c8Sopenharmony_ci fn enum_variant_name( 3912a9d9c8Sopenharmony_ci &self, 4012a9d9c8Sopenharmony_ci _enum_name: Option<&str>, 4112a9d9c8Sopenharmony_ci original_variant_name: &str, 4212a9d9c8Sopenharmony_ci _variant_value: EnumVariantValue, 4312a9d9c8Sopenharmony_ci ) -> Option<String> { 4412a9d9c8Sopenharmony_ci Some(format!("RENAMED_{}", original_variant_name)) 4512a9d9c8Sopenharmony_ci } 4612a9d9c8Sopenharmony_ci} 4712a9d9c8Sopenharmony_ci 4812a9d9c8Sopenharmony_ci#[derive(Debug)] 4912a9d9c8Sopenharmony_cistruct BlocklistedTypeImplementsTrait; 5012a9d9c8Sopenharmony_ci 5112a9d9c8Sopenharmony_ciimpl ParseCallbacks for BlocklistedTypeImplementsTrait { 5212a9d9c8Sopenharmony_ci fn blocklisted_type_implements_trait( 5312a9d9c8Sopenharmony_ci &self, 5412a9d9c8Sopenharmony_ci _name: &str, 5512a9d9c8Sopenharmony_ci derive_trait: DeriveTrait, 5612a9d9c8Sopenharmony_ci ) -> Option<ImplementsTrait> { 5712a9d9c8Sopenharmony_ci if derive_trait == DeriveTrait::Hash { 5812a9d9c8Sopenharmony_ci Some(ImplementsTrait::No) 5912a9d9c8Sopenharmony_ci } else { 6012a9d9c8Sopenharmony_ci Some(ImplementsTrait::Yes) 6112a9d9c8Sopenharmony_ci } 6212a9d9c8Sopenharmony_ci } 6312a9d9c8Sopenharmony_ci} 6412a9d9c8Sopenharmony_ci 6512a9d9c8Sopenharmony_cipub fn lookup(cb: &str) -> Box<dyn ParseCallbacks> { 6612a9d9c8Sopenharmony_ci match cb { 6712a9d9c8Sopenharmony_ci "enum-variant-rename" => Box::new(EnumVariantRename), 6812a9d9c8Sopenharmony_ci "blocklisted-type-implements-trait" => { 6912a9d9c8Sopenharmony_ci Box::new(BlocklistedTypeImplementsTrait) 7012a9d9c8Sopenharmony_ci } 7112a9d9c8Sopenharmony_ci call_back => { 7212a9d9c8Sopenharmony_ci if call_back.starts_with("remove-function-prefix-") { 7312a9d9c8Sopenharmony_ci let prefix = call_back 7412a9d9c8Sopenharmony_ci .split("remove-function-prefix-") 7512a9d9c8Sopenharmony_ci .last() 7612a9d9c8Sopenharmony_ci .to_owned(); 7712a9d9c8Sopenharmony_ci let lnopc = RemovePrefixParseCallback::new(prefix.unwrap()); 7812a9d9c8Sopenharmony_ci Box::new(lnopc) 7912a9d9c8Sopenharmony_ci } else { 8012a9d9c8Sopenharmony_ci panic!("Couldn't find name ParseCallbacks: {}", cb) 8112a9d9c8Sopenharmony_ci } 8212a9d9c8Sopenharmony_ci } 8312a9d9c8Sopenharmony_ci } 8412a9d9c8Sopenharmony_ci} 85