use std::collections::HashSet;
use crate::lint::ManagedConfig;
use crate::lint::finding::Finding;
use crate::lint::source_tree::SourceTree;
pub fn check(tree: &SourceTree, managed: &ManagedConfig) -> Vec<Finding> {
let mut out = Vec::new();
let in_source: HashSet<_> = tree
.catalog
.schemas
.iter()
.map(|s| s.name.clone())
.collect();
let in_config: HashSet<_> = managed.schemas.iter().cloned().collect();
if in_config.is_empty() {
return out;
}
for s in &in_source {
if !in_config.contains(s) {
out.push(Finding::error(
"managed_schemas_match",
format!(
"schema `{s}` is declared in source but not listed in `[managed].schemas`",
),
));
}
}
for s in &in_config {
if !in_source.contains(s) {
out.push(Finding::error(
"managed_schemas_match",
format!(
"schema `{s}` is listed in `[managed].schemas` but not declared in source",
),
));
}
}
out
}