use serde::Serialize;
use crate::contracts::NamespaceMetadata;
use crate::routing::registry::RouteRegistry;
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct RouteInventory {
pub routes: Vec<Vec<String>>,
pub aliases: Vec<(Vec<String>, Vec<String>)>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize)]
pub struct RegistryInventory {
pub namespaces: Vec<NamespaceMetadata>,
}
#[must_use]
pub fn route_inventory(registry: &RouteRegistry) -> RouteInventory {
let routes = registry
.built_in_paths()
.into_iter()
.map(|path| path.segments.into_iter().map(|segment| segment.0).collect())
.collect();
let aliases = registry
.alias_rewrites()
.into_iter()
.map(|(alias, canonical)| {
(
alias.segments.into_iter().map(|segment| segment.0).collect(),
canonical.segments.into_iter().map(|segment| segment.0).collect(),
)
})
.collect();
RouteInventory { routes, aliases }
}
#[must_use]
pub fn registry_inventory(registry: &RouteRegistry) -> RegistryInventory {
RegistryInventory { namespaces: registry.route_tree() }
}