This is a parser library for the
CNI configuration format (CoNfiguration Initialization format)
by libuconf.
CNI standard compliance
The implementation is fully compliant with the core and
ini part of the specification and with the extension more-keys.
Examples
use std::collections::HashMap;
let cni = r"
[section]
key = value
rkey = `raw value with `` escaped`
subsection.key = look, whitespace!
";
let parsed = cni_format::from_str(&cni).expect("could not parse CNI");
{
let mut result: HashMap<String, String> = HashMap::new();
result.insert("section.key".to_string(), "value".to_string());
result.insert("section.rkey".to_string(), "raw value with ` escaped".to_string());
result.insert("section.subsection.key".to_string(), "look, whitespace!".to_string());
assert_eq!(parsed, result);
}
# #[cfg(feature = "api")]
{
let mut section: HashMap<String, String> = HashMap::new();
section.insert("key".to_string(), "value".to_string());
section.insert("rkey".to_string(), "raw value with ` escaped".to_string());
section.insert("subsection.key".to_string(), "look, whitespace!".to_string());
use cni_format::CniExt;
assert_eq!(parsed.sub_tree("section"), section);
}
# #[cfg(feature = "api")]
{
let mut section: HashMap<String, String> = HashMap::new();
section.insert("key".to_string(), "value".to_string());
section.insert("rkey".to_string(), "raw value with ` escaped".to_string());
use cni_format::CniExt;
assert_eq!(parsed.sub_leaves("section"), section);
}