use std::sync::LazyLock;
use std::sync::atomic::AtomicU64;
#[derive(Debug)]
pub struct TraceSite {
pub name: &'static str,
pub enabled_slots: AtomicU64,
}
impl TraceSite {
pub const fn new(name: &'static str) -> Self {
Self {
name,
enabled_slots: AtomicU64::new(0),
}
}
}
#[linkme::distributed_slice]
pub static REGISTRY: [TraceSite] = [..];
pub fn keys() -> &'static [&'static str] {
static KEYS: LazyLock<Vec<&'static str>> = LazyLock::new(|| {
let mut keys: Vec<&'static str> = REGISTRY.iter().map(|site| site.name).collect();
keys.sort_unstable();
keys.dedup();
keys
});
&KEYS
}