a34fe57
zhenyi
feat(lib): add new handlers and export views (db users_loader, repo readme/lifecycle/tree/PR/release, issue reopen, export sidebar/basic)
a34fe57
use std::any::type_name;
pub fn topic_for_type<T>(prefix: &str) -> String {
let raw = type_name::<T>();
format!("{prefix}.{}", sanitize_topic_component(raw))
}
pub fn sanitize_topic_component(raw: &str) -> String {
let mut out = String::with_capacity(raw.len());
let mut last_was_underscore = false;
for ch in raw.chars() {
let allowed = ch.is_ascii_alphanumeric() || ch == '.' || ch == '-';
if allowed {
out.push(ch);
last_was_underscore = false;
} else if !last_was_underscore {
out.push('_');
last_was_underscore = true;
}
}
let trimmed = out.trim_matches('_').to_string();
if trimmed.is_empty() {
"unknown".to_string()
} else {
trimmed
}
}