in src/plugin/mod.rs [106:138]
fn select_plugin(class_name: Option<&str>, function_name: &str) -> Option<&'static DynPlugin> {
let mut selected_plugin = None;
'plugin: for plugin in &*PLUGINS {
if let Some(class_name) = class_name {
if let Some(plugin_class_names) = plugin.class_names() {
if plugin_class_names.contains(&class_name) {
selected_plugin = Some(plugin);
break 'plugin;
}
}
if let Some(parent_classes) = plugin.parent_classes() {
if let Ok(class) = ClassEntry::from_globals(class_name) {
// Iterate parent_classes and skip None.
for parent_class in parent_classes.into_iter().flatten() {
if class.is_instance_of(parent_class) {
selected_plugin = Some(plugin);
break 'plugin;
}
}
}
}
}
if let Some(function_name_prefix) = plugin.function_name_prefix() {
if function_name.starts_with(function_name_prefix) {
selected_plugin = Some(plugin);
break 'plugin;
}
}
}
selected_plugin.map(AsRef::as_ref)
}