Expand description
Custom configuration parser with Fn.
§Example
In the following example we implement a complete HJSON parser.
use plugx_config::{
ext::{plugx_input::Input, anyhow::anyhow},
error::Error,
parser::{Parser, closure::Closure}
};
let parser_fn = |bytes: &[u8]| -> anyhow::Result<Input> {
deser_hjson::from_slice(bytes).map_err(|error| anyhow!(error))
};
let parser_name = "HJSON";
let parser_format = "hjson";
let parser = Closure::new("HJSNO", "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.parse(bytes).unwrap();
assert!(
parsed.as_map().len() == 2 &&
parsed.as_map().contains_key("foo") &&
parsed.as_map().contains_key("hello")
);
let foo = parsed.as_map().get("foo").unwrap();
assert!(
foo.as_map().len() == 2 &&
foo.as_map().contains_key("bar") &&
foo.as_map().contains_key("xyz")
);
let bar = foo.as_map().get("bar").unwrap();
assert_eq!(bar.as_map().get("baz").unwrap(), &"Qux".into());
assert_eq!(bar.as_map().get("abc").unwrap(), &3.14.into());
let xyz = foo.as_map().get("xyz").unwrap();
assert_eq!(xyz, &false.into());
let list = ["w", "o", "l", "d"].into();
assert_eq!(parsed.as_map().get("hello").unwrap(), &list);Structs§
- Closure
- Builder struct.
Type Aliases§
- Boxed
Parser Fn - A
|&[u8]| -> Result<Input, ConfigurationParserError>Fn to parse contents. - Boxed
Validator Fn - A
|&[u8]| -> Option<bool>Fn to validate contents.