1use serde::{Deserialize, Serialize};
4
5fn default_true() -> bool {
6 true
7}
8
9#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
12pub struct FeatureFilter {
13 #[serde(default = "default_true")]
14 pub roads: bool,
15 #[serde(default = "default_true")]
16 pub buildings: bool,
17 #[serde(default = "default_true")]
18 pub water: bool,
19 #[serde(default = "default_true")]
20 pub landuse: bool,
21 #[serde(default = "default_true")]
22 pub railways: bool,
23}
24
25impl Default for FeatureFilter {
26 fn default() -> Self {
27 Self {
28 roads: true,
29 buildings: true,
30 water: true,
31 landuse: true,
32 railways: true,
33 }
34 }
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn default_enables_all() {
43 let f = FeatureFilter::default();
44 assert!(f.roads, "roads should be enabled by default");
45 assert!(f.buildings, "buildings should be enabled by default");
46 assert!(f.water, "water should be enabled by default");
47 assert!(f.landuse, "landuse should be enabled by default");
48 assert!(f.railways, "railways should be enabled by default");
49 }
50
51 #[test]
52 fn serde_empty_json_uses_defaults() {
53 let f: FeatureFilter = serde_json::from_str("{}").unwrap();
54 assert!(f.roads && f.buildings && f.water && f.landuse && f.railways);
55 }
56
57 #[test]
58 fn serde_partial_disable() {
59 let f: FeatureFilter = serde_json::from_str(r#"{"roads":false,"landuse":false}"#).unwrap();
60 assert!(!f.roads, "roads should be disabled");
61 assert!(!f.landuse, "landuse should be disabled");
62 assert!(f.buildings, "buildings should still be enabled");
63 assert!(f.water, "water should still be enabled");
64 assert!(f.railways, "railways should still be enabled");
65 }
66}