1use crate::FromConfig;
2
3pub trait FromConfigWithPrefix: FromConfig {
5 fn prefix() -> &'static str;
7}
8
9#[cfg_attr(coverage_nightly, coverage(off))]
10#[cfg(test)]
11mod test {
12 use crate::{source::memory::HashSource, test::TestConfigExt, *};
13 #[derive(FromConfig, Debug, PartialEq, Eq)]
14 #[config(prefix = "app", crate = "crate")]
15 pub(crate) struct ConfigObject {
16 hello: String,
17 option: Option<String>,
18 list: Vec<String>,
19 count: u8,
20 #[config(name = "count")]
21 count_rename: u8,
22 #[config(default = 3)]
23 def: u8,
24 }
25
26 #[test]
27 fn derive_test() {
28 let config = HashSource::new("test")
29 .set("app.hello", "world")
30 .set("app.count", "1")
31 .set("app.count_rename", "2")
32 .new_config();
33 let object: ConfigObject = config.get("app").unwrap();
34 assert_eq!("world", object.hello);
35 assert_eq!(None, object.option);
36 let v: Vec<String> = vec![];
37 assert_eq!(v, object.list);
38 assert_eq!(1, object.count);
39 assert_eq!(1, object.count_rename);
40 assert_eq!(3, object.def);
41 let object2: ConfigObject = config.get_predefined().unwrap();
42 assert_eq!(object, object2);
43 }
44}