#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[serde(default)]
pub struct EngineDefaults {
pub hud: bool,
pub debug_hud: bool,
pub sky: bool,
pub story_pause_menu: bool,
pub loading_overlay: bool,
pub physics_config: bool,
}
impl Default for EngineDefaults {
fn default() -> Self {
Self {
hud: true,
debug_hud: true,
sky: true,
story_pause_menu: true,
loading_overlay: true,
physics_config: true,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn every_injected_default_is_on_until_opted_out_of() {
let d = EngineDefaults::default();
assert!(d.hud);
assert!(d.debug_hud);
assert!(d.sky);
assert!(d.story_pause_menu);
assert!(d.loading_overlay);
assert!(d.physics_config);
let declared: EngineDefaults = serde_json::from_str("{}").unwrap();
assert!(declared.hud && declared.debug_hud && declared.sky);
assert!(declared.story_pause_menu && declared.loading_overlay);
assert!(declared.physics_config);
}
#[test]
fn opting_out_of_one_default_leaves_the_rest_alone() {
let d: EngineDefaults = serde_json::from_str(r#"{"sky":false}"#).unwrap();
assert!(!d.sky);
assert!(d.hud && d.debug_hud && d.story_pause_menu && d.loading_overlay);
assert!(d.physics_config);
let bytes = postcard::to_allocvec(&d).unwrap();
let back: EngineDefaults = postcard::from_bytes(&bytes).unwrap();
assert!(!back.sky);
assert!(back.hud);
}
}