use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Debug, Clone, Default, Deserialize, Serialize, JsonSchema, PartialEq)]
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
pub struct PolyConfig {
#[serde(default)]
pub exclude: Vec<String>,
#[serde(default)]
pub per_file_ignores: BTreeMap<String, Vec<String>>,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn poly_config_deserializes_empty() {
let cfg: PolyConfig = toml::from_str("").unwrap();
assert!(cfg.exclude.is_empty());
assert!(cfg.per_file_ignores.is_empty());
}
#[test]
fn poly_config_deserializes_full() {
let toml_str = r#"
exclude = ["vendor/**", "third-party/**"]
[per-file-ignores]
"**/legacy.py" = ["ANN", "D103"]
"**/compat.py" = ["UP035"]
"#;
let cfg: PolyConfig = toml::from_str(toml_str).unwrap();
assert_eq!(cfg.exclude, vec!["vendor/**", "third-party/**"]);
assert_eq!(cfg.per_file_ignores.len(), 2);
assert_eq!(cfg.per_file_ignores["**/legacy.py"], vec!["ANN", "D103"]);
assert_eq!(cfg.per_file_ignores["**/compat.py"], vec!["UP035"]);
}
#[test]
fn poly_config_rejects_unknown_fields() {
let err = toml::from_str::<PolyConfig>("unknown_field = true");
assert!(err.is_err(), "deny_unknown_fields must reject unrecognised keys");
}
}