1 #![cfg(feature = "ini")]
2 
3 use serde_derive::Deserialize;
4 use std::path::PathBuf;
5 
6 use config::{Config, File, FileFormat};
7 
8 #[derive(Debug, Deserialize, PartialEq)]
9 struct Place {
10     name: String,
11     longitude: f64,
12     latitude: f64,
13     favorite: bool,
14     reviews: u64,
15     rating: Option<f32>,
16 }
17 
18 #[derive(Debug, Deserialize, PartialEq)]
19 struct Settings {
20     debug: f64,
21     place: Place,
22 }
23 
make() -> Config24 fn make() -> Config {
25     let mut c = Config::default();
26     c.merge(File::new("tests/Settings", FileFormat::Ini))
27         .unwrap();
28     c
29 }
30 
31 #[test]
test_file()32 fn test_file() {
33     let c = make();
34     let s: Settings = c.try_deserialize().unwrap();
35     assert_eq!(
36         s,
37         Settings {
38             debug: 1.0,
39             place: Place {
40                 name: String::from("Torre di Pisa"),
41                 longitude: 43.722_498_5,
42                 latitude: 10.397_052_2,
43                 favorite: false,
44                 reviews: 3866,
45                 rating: Some(4.5),
46             },
47         }
48     );
49 }
50 
51 #[test]
test_error_parse()52 fn test_error_parse() {
53     let mut c = Config::default();
54     let res = c.merge(File::new("tests/Settings-invalid", FileFormat::Ini));
55 
56     let path: PathBuf = ["tests", "Settings-invalid.ini"].iter().collect();
57 
58     assert!(res.is_err());
59     assert_eq!(
60         res.unwrap_err().to_string(),
61         format!(
62             r#"2:0 expecting "[Some('='), Some(':')]" but found EOF. in {}"#,
63             path.display()
64         )
65     );
66 }
67