use std::collections::BTreeMap;
use panproto_gat::Name;
use crate::Schema;
#[must_use]
pub fn kind_multiset(schema: &Schema) -> BTreeMap<String, usize> {
let mut map = BTreeMap::new();
for v in schema.vertices.values() {
*map.entry(v.kind.to_string()).or_insert(0) += 1;
}
map
}
#[must_use]
pub fn edge_multiset(schema: &Schema) -> BTreeMap<(String, String, String), usize> {
let mut map: BTreeMap<(String, String, String), usize> = BTreeMap::new();
for edge in schema.edges.keys() {
let src_kind = vertex_kind(schema, &edge.src);
let tgt_kind = vertex_kind(schema, &edge.tgt);
*map.entry((src_kind, edge.kind.to_string(), tgt_kind))
.or_insert(0) += 1;
}
map
}
fn vertex_kind(schema: &Schema, id: &Name) -> String {
schema
.vertices
.get(id)
.map(|v| v.kind.to_string())
.unwrap_or_default()
}