use heck::ToSnakeCase;
fn prefix_component(prefix: &str) -> String {
prefix.to_lowercase()
}
fn service_component(service_name: &str) -> String {
service_name.to_snake_case()
}
pub fn service_new_symbol(prefix: &str, service_name: &str) -> String {
format!("{}_{}_new", prefix_component(prefix), service_component(service_name))
}
pub fn service_free_symbol(prefix: &str, service_name: &str) -> String {
format!("{}_{}_free", prefix_component(prefix), service_component(service_name))
}
pub fn service_register_symbol(prefix: &str, service_name: &str, method_name: &str) -> String {
format!(
"{}_{}_register_{}",
prefix_component(prefix),
service_component(service_name),
method_name.to_snake_case()
)
}
pub fn service_method_symbol(prefix: &str, service_name: &str, method_name: &str) -> String {
format!(
"{}_{}_{}",
prefix_component(prefix),
service_component(service_name),
method_name.to_snake_case()
)
}
pub fn service_entrypoint_symbol(prefix: &str, service_name: &str, method_name: &str) -> String {
format!(
"{}_{}_ep_{}",
prefix_component(prefix),
service_component(service_name),
method_name.to_snake_case()
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn service_new_and_free_bracket_the_service_component() {
assert_eq!(service_new_symbol("demo", "HttpRouter"), "demo_http_router_new");
assert_eq!(service_free_symbol("demo", "HttpRouter"), "demo_http_router_free");
}
#[test]
fn service_register_symbol_carries_the_register_infix() {
assert_eq!(
service_register_symbol("demo", "HttpRouter", "add_handler"),
"demo_http_router_register_add_handler"
);
}
#[test]
fn service_method_symbol_has_no_infix() {
assert_eq!(
service_method_symbol("demo", "HttpRouter", "get"),
"demo_http_router_get"
);
assert_ne!(
service_method_symbol("demo", "HttpRouter", "get"),
service_register_symbol("demo", "HttpRouter", "get")
);
}
#[test]
fn service_entrypoint_symbol_carries_the_ep_infix() {
assert_eq!(
service_entrypoint_symbol("demo", "HttpRouter", "run"),
"demo_http_router_ep_run"
);
}
#[test]
fn service_symbols_lowercase_the_prefix() {
assert_eq!(service_new_symbol("SampleCore", "Router"), "samplecore_router_new");
assert_eq!(
service_entrypoint_symbol("SampleCore", "Router", "run"),
"samplecore_router_ep_run"
);
}
}