#![allow(non_snake_case, non_camel_case_types)]
use envious::Config;
use serde::Deserialize;
#[derive(Debug, Deserialize, PartialEq, Eq)]
struct Root {
field1: usize,
FIELD2: Variants,
FiElD3: Leaf,
}
#[derive(Debug, Deserialize, PartialEq, Eq)]
enum Variants {
Empty,
ALSO_EMPTY,
NoTeMpTy(usize),
}
#[derive(Debug, Deserialize, PartialEq, Eq)]
struct Leaf {
field1: usize,
FIELD2: Variants,
FiElD3: usize,
}
#[test]
fn parse_from_env() {
let mut config = Config::new();
let expected = Root {
field1: 1,
FIELD2: Variants::ALSO_EMPTY,
FiElD3: Leaf {
field1: 2,
FIELD2: Variants::NoTeMpTy(3),
FiElD3: 4,
},
};
let vars = [
("field1", "1"),
("FIELD2", "ALSO_EMPTY"),
("FiElD3__field1", "2"),
("FiElD3__FIELD2__NoTeMpTy", "3"),
("FiElD3__FiElD3", "4"),
];
config.case_sensitive(true);
let root: Root = config.build_from_iter(vars).unwrap();
assert_eq!(root, expected);
config.case_sensitive(false);
let root: Root = config.build_from_iter(vars).unwrap();
assert_eq!(root, expected);
let vars = [
("FIELD1", "1"),
("FIELD2", "ALSO_EMPTY"),
("FIELD3__FIELD1", "2"),
("FIELD3__FIELD2__NOTEMPTY", "3"),
("FIELD3__FIELD3", "4"),
];
let root: Root = config.build_from_iter(vars).unwrap();
assert_eq!(root, expected);
config.case_sensitive(true);
let result: Result<Root, _> = config.build_from_iter(vars);
result.unwrap_err();
let vars = [
("field1", "1"),
("field2", "ALSO_EMPTY"),
("field3__field1", "2"),
("field3__field2__notempty", "3"),
("field3__field3", "4"),
];
let result: Result<Root, _> = config.build_from_iter(vars);
result.unwrap_err();
config.case_sensitive(false);
let root: Root = config.build_from_iter(vars).unwrap();
assert_eq!(root, expected);
let vars = [
("field1", "1"),
("field2", "ALSO_EMPTY"),
("Field3__field1", "2"),
("fIeld3__field2__notempty", "3"),
("fiEld3__field3", "4"),
];
let root: Root = config.build_from_iter(vars).unwrap();
assert_eq!(root, expected);
config.case_sensitive(true);
let result: Result<Root, _> = config.build_from_iter(vars);
result.unwrap_err();
}