#[derive(Default,Debug)]
struct Aggregate {
+ keys_allowed: HashMap<&'static str, SectionKindList>,
sections: HashMap<SectionName, SectionMap>,
}
let loc = Arc::new(path_for_loc.to_owned());
for (sn, vars) in map {
- //dbg!( InstanceConfig::FIELDS );// check xxx vars are in fields
-
let sn = sn.parse().dcontext(&sn)?;
+
+ for key in vars.keys() {
+ let skl = self.keys_allowed.get(key.as_str()).ok_or_else(
+ || anyhow!("unknown configuration key {:?}", key)
+ )?;
+ if ! skl.contains(&sn) {
+ throw!(anyhow!("configuration key {:?} not applicable \
+ in this kind of section {:?}", key, &sn))
+ }
+ }
+
let ent = self.sections.entry(sn).or_default();
for (key, raw) in vars {
let raw = match raw {
let agg = (||{
let mut agg = Aggregate::default();
+ agg.keys_allowed.extend(
+ InstanceConfig::FIELDS.iter().cloned()
+ );
agg.read_string(DEFAULT_CONFIG.into(),
"<build-in defaults>".as_ref()).unwrap();