//dbg!( InstanceConfig::FIELDS );// check xxx vars are in fields
let sn = sn.parse().dcontext(&sn)?;
- self.sections.entry(sn)
- .or_default()
- .extend(
- vars.into_iter()
- .map(|(k,raw)| {
- (k.replace('-',"_"),
- RawVal { raw, loc: loc.clone() })
- })
- );
+ let ent = self.sections.entry(sn).or_default();
+ for (key, raw) in vars {
+ let raw = match raw {
+ Some(raw) if raw.starts_with('\'') || raw.starts_with('"') => Some(
+ (||{
+ if raw.contains('\\') {
+ throw!(
+ anyhow!("quoted value contains backslash, not supported")
+ );
+ }
+ let unq = raw[1..].strip_suffix(&raw[0..1])
+ .ok_or_else(
+ || anyhow!("mismatched quotes around quoted value")
+ )?
+ .to_owned();
+ Ok::<_,AE>(unq)
+ })()
+ .with_context(|| format!("key {:?}", key))
+ .dcontext(path_for_loc)?
+ ),
+ x => x,
+ };
+ let key = key.replace('-',"_");
+ ent.insert(key, RawVal { raw, loc: loc.clone() });
+ }
}
-
}
#[throws(AE)] // AE includes path