minimum for miniconf v0.13
This commit is contained in:
@ -1,7 +1,12 @@
|
||||
use std::str::from_utf8;
|
||||
|
||||
use macroconf::config;
|
||||
use miniconf::{Error::Absent, JsonCoreSlash, Tree, TreeKey};
|
||||
use miniconf::{
|
||||
Error::Traversal,
|
||||
IntoKeys, JsonCoreSlash, Path,
|
||||
Traversal::{Absent, TooLong},
|
||||
Tree, TreeKey,
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
#[config]
|
||||
@ -21,7 +26,7 @@ struct SubConfig {
|
||||
#[config]
|
||||
#[derive(Debug, Clone, Copy, Tree)]
|
||||
struct Config {
|
||||
#[tree(depth(2))]
|
||||
#[tree(depth = 2)]
|
||||
sub_config: SubConfig,
|
||||
}
|
||||
|
||||
@ -32,8 +37,8 @@ fn keys() {
|
||||
.enumerate()
|
||||
{
|
||||
assert_eq!(
|
||||
SubConfig::traverse_by_key(std::iter::once(field), |index, name| {
|
||||
assert_eq!((id, field), (index, name));
|
||||
SubConfig::traverse_by_key([field].into_keys(), |index, name, _len| {
|
||||
assert_eq!((id, Some(field)), (index, name));
|
||||
Ok::<_, ()>(())
|
||||
}),
|
||||
Ok(1)
|
||||
@ -44,16 +49,20 @@ fn keys() {
|
||||
#[test]
|
||||
fn sub_keys() {
|
||||
assert_eq!(
|
||||
SubConfig::traverse_by_key(["skipped", "value"].into_iter(), |_, _| Ok::<_, ()>(())),
|
||||
SubConfig::traverse_by_key(["skipped", "value"].into_keys(), |_, _, _| Ok::<_, ()>(())),
|
||||
Err(Traversal(TooLong(1)))
|
||||
);
|
||||
assert_eq!(
|
||||
SubConfig::traverse_by_key(["skipped"].into_keys(), |_, _, _| Ok::<_, ()>(())),
|
||||
Ok(1)
|
||||
);
|
||||
for field in ["min", "max", "default", "description"] {
|
||||
assert_eq!(
|
||||
SubConfig::traverse_by_key([field, "value"].into_iter(), |_, _| Ok::<_, ()>(())),
|
||||
SubConfig::traverse_by_key([field, "value"].into_keys(), |_, _, _| Ok::<_, ()>(())),
|
||||
Ok(2)
|
||||
);
|
||||
assert_eq!(
|
||||
SubConfig::traverse_by_key([field, field].into_iter(), |_, _| Ok::<_, ()>(())),
|
||||
SubConfig::traverse_by_key([field, field].into_keys(), |_, _, _| Ok::<_, ()>(())),
|
||||
Ok(2)
|
||||
);
|
||||
}
|
||||
@ -123,7 +132,7 @@ fn deserialize() {
|
||||
"/description/description",
|
||||
] {
|
||||
let res = config.set_json(input, b"10");
|
||||
assert_eq!(res, Err(Absent(1)));
|
||||
assert_eq!(res, Err(Traversal(Absent(1))));
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,8 +149,8 @@ fn subconfig() {
|
||||
"/sub_config/description/value".to_owned(),
|
||||
"/sub_config/description/description".to_owned(),
|
||||
];
|
||||
let paths: Vec<String> = Config::iter_paths::<String>("/")
|
||||
.filter_map(|path| path.ok())
|
||||
let paths: Vec<String> = Config::nodes::<Path<String, '/'>>()
|
||||
.filter_map(|path| path.ok().map(|(n, _)| n.0))
|
||||
.collect();
|
||||
assert_eq!(paths, control);
|
||||
}
|
||||
|
Reference in New Issue
Block a user