use crate::codegen::generators::trait_bridge::trait_snake_of;
pub fn trait_register_symbol(prefix: &str, register_fn: &str) -> String {
format!("{prefix}_{register_fn}")
}
pub fn trait_unregister_symbol(prefix: &str, trait_name: &str) -> String {
format!("{prefix}_unregister_{}", trait_snake_of(trait_name))
}
pub fn trait_clear_symbol(prefix: &str, trait_name: &str) -> String {
format!("{prefix}_clear_{}", trait_snake_of(trait_name))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn trait_register_symbol_uses_the_configured_function_name() {
assert_eq!(
trait_register_symbol("demo", "register_ocr_backend"),
"demo_register_ocr_backend"
);
assert_eq!(trait_register_symbol("demo", "install_backend"), "demo_install_backend");
}
#[test]
fn trait_register_symbol_is_not_derived_from_the_trait_name() {
assert_ne!(
trait_register_symbol("demo", "install_backend"),
format!("demo_register_{}", trait_snake_of("OcrBackend"))
);
}
#[test]
fn trait_unregister_and_clear_symbols_snake_the_trait_name() {
assert_eq!(
trait_unregister_symbol("demo", "OcrBackend"),
"demo_unregister_ocr_backend"
);
assert_eq!(trait_clear_symbol("demo", "OcrBackend"), "demo_clear_ocr_backend");
assert_eq!(
trait_unregister_symbol("demo", "HTTPClient"),
"demo_unregister_http_client"
);
}
}