use super::Config;
#[must_use]
pub fn validate(config: &Config) -> Vec<String> {
let mut errors = Vec::new();
for (key, lang_config) in &config.language {
if let Some(ref target) = lang_config.inherit {
if !lang_config.servers.is_empty() {
errors.push(format!(
"Language '{key}' has both `inherit` and `servers` — \
inherit entries must not specify servers"
));
}
match config.language.get(target) {
None => {
errors.push(format!(
"Language '{key}' inherits from '{target}', \
but '{target}' is not configured"
));
}
Some(target_config) if target_config.inherit.is_some() => {
errors.push(format!(
"Language '{key}' inherits from '{target}', \
but '{target}' also inherits — chains are not allowed"
));
}
_ => {}
}
} else if lang_config.servers.is_empty() {
errors.push(format!(
"Language '{key}' has no `servers` and no `inherit` — \
concrete entries must specify a servers list"
));
}
for server_name in &lang_config.servers {
if !config.server.contains_key(server_name) {
errors.push(format!(
"Language '{key}' references server '{server_name}', \
but no [server.{server_name}] is defined"
));
}
}
}
for (name, server_def) in &config.server {
if server_def.command.is_empty() {
errors.push(format!(
"Server '{name}' has an empty `command` — \
server definitions must specify a command"
));
}
}
errors
}