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