kcl_lib/settings/
mod.rs

1//! This module contains settings for kcl projects as well as the Design Studio.
2
3pub mod types;
4
5#[cfg(test)]
6mod generate_settings_docs;
7
8#[cfg(test)]
9mod tests {
10    use kittycad_modeling_cmds::units::UnitLength;
11
12    use super::types::{Configuration, ModelingSettings};
13
14    #[test]
15    fn default_unit_length_is_millimeters() {
16        // Ensure our settings default to millimeters as the base unit.
17        let modeling = ModelingSettings::default();
18        assert_eq!(modeling.base_unit, UnitLength::Millimeters);
19    }
20
21    #[test]
22    fn toml_default_unit_length_roundtrip_is_mm() {
23        // Explicitly setting mm should parse to the default configuration.
24        let with_mm = r#"[settings.modeling]
25base_unit = "mm"
26"#;
27
28        let parsed = toml::from_str::<Configuration>(with_mm).unwrap();
29        assert_eq!(parsed.settings.modeling.base_unit, UnitLength::Millimeters);
30
31        // Serializing defaults should omit modeling/base_unit entirely.
32        let serialized = toml::to_string(&parsed).unwrap();
33        assert_eq!(serialized, "");
34
35        // An empty [settings.modeling] section should still default to mm.
36        let empty_modeling_section = r#"[settings.modeling]
37"#;
38        let parsed2 = toml::from_str::<Configuration>(empty_modeling_section).unwrap();
39        assert_eq!(parsed2.settings.modeling.base_unit, UnitLength::Millimeters);
40    }
41
42    #[test]
43    fn configuration_default_has_mm() {
44        let cfg = Configuration::default();
45        assert_eq!(cfg.settings.modeling.base_unit, UnitLength::Millimeters);
46
47        // Default config serializes to empty TOML because everything is defaulted/omitted.
48        let serialized = toml::to_string(&cfg).unwrap();
49        assert_eq!(serialized, "");
50    }
51}