Expand description

Custom configuration parser with Fn.

Example

In the following example we implement a complete HJSON parser.

use plugx_config::{
    error::ConfigurationParserError,
    parser::{ConfigurationParser, closure::ConfigurationParserFn}
};

let parser_fn = |bytes: &[u8]| {
    deser_hjson::from_slice(bytes).map_err(|error| ConfigurationParserError::Parse {
        data: String::from_utf8_lossy(bytes).to_string(),
        parser: "HJSON".to_string(),
        supported_format_list: ["hjson".into()].into(),
        source: error.into(),
    })
};

let parser = ConfigurationParserFn::new("hjson", Box::new(parser_fn));
let bytes = br#"
{
    hello: ["w", "o", "l", "d"]
    foo: {
        bar: {
            baz: Qux
            abc: 3.14
        }
        xyz: false
    }
}
"#;
let parsed = parser.try_parse(bytes).unwrap();
assert!(
    parsed.map_ref().unwrap().len() == 2 &&
    parsed.map_ref().unwrap().contains_key("foo") &&
    parsed.map_ref().unwrap().contains_key("hello")
);
let foo = parsed.map_ref().unwrap().get("foo").unwrap();
assert!(
    foo.map_ref().unwrap().len() == 2 &&
    foo.map_ref().unwrap().contains_key("bar") &&
    foo.map_ref().unwrap().contains_key("xyz")
);
let bar = foo.map_ref().unwrap().get("bar").unwrap();
assert_eq!(bar.map_ref().unwrap().get("baz").unwrap(), &"Qux".into());
assert_eq!(bar.map_ref().unwrap().get("abc").unwrap(), &3.14.into());
let xyz = foo.map_ref().unwrap().get("xyz").unwrap();
assert_eq!(xyz, &false.into());
let list = ["w", "o", "l", "d"].into();
assert_eq!(parsed.map_ref().unwrap().get("hello").unwrap(), &list);

Structs

Type Aliases