cni_format 0.6.1

parser and serializer for the CNI configuration format
Documentation

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");

// You can get everything, section names will be prepended to key names.
{
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);
}

// You can get values from one section only.
# #[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 trait that adds CNI related functionality
use cni_format::CniExt;

// filter out values in section "section"
assert_eq!(parsed.sub_tree("section"), section);
}

// You can get child nodes from one section only, excluding subsections.
# #[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 trait that adds CNI related functionality
use cni_format::CniExt;

// filter out values in section "section", but not in subsections
assert_eq!(parsed.sub_leaves("section"), section);
}