use crate::catalog::CatalogEntry;
pub fn iter_entries() -> impl Iterator<Item = &'static dyn CatalogEntry> {
inventory::iter::<&'static dyn CatalogEntry>().copied()
}
pub fn find_by_id(id: &str) -> Option<&'static dyn CatalogEntry> {
iter_entries().find(|e| e.id() == id)
}
pub fn find_by_file(path: &str) -> Option<&'static dyn CatalogEntry> {
iter_entries().find(|e| e.source().matches_path(path))
}
pub fn entries_by_group() -> Vec<(&'static str, Vec<&'static dyn CatalogEntry>)> {
use std::collections::BTreeMap;
let mut map: BTreeMap<&'static str, Vec<&'static dyn CatalogEntry>> = BTreeMap::new();
for e in iter_entries() {
map.entry(e.group()).or_default().push(e);
}
for entries in map.values_mut() {
entries.sort_by_key(|e| e.display_name());
}
map.into_iter().collect()
}