configulator-rs 0.1.3

A configuration loader that populates a struct from config files, environment variables, and CLI flags
Documentation
use crate::field_info::{FieldInfo, FieldType};
use crate::value_map::{parse_comma_list, ConfigValue, ValueMap};

/// Build a `ValueMap` from the `default` attributes on config fields.
pub fn load_defaults(fields: &[FieldInfo]) -> ValueMap {
    let mut map = ValueMap::new();
    for field in fields {
        let key = field.config_name.to_string();
        match &field.field_type {
            FieldType::Struct(sub_fields) => {
                let nested = load_defaults(sub_fields);
                // Empty nested maps are omitted; the struct will get T::default()
                // via `parse_nested` when the key is absent from the map.
                if !nested.is_empty() {
                    map.insert(key, ConfigValue::Nested(nested));
                }
            }
            FieldType::List => {
                if let Some(default_str) = field.default_value {
                    map.insert(key, ConfigValue::List(parse_comma_list(default_str)));
                }
            }
            FieldType::Bool | FieldType::Scalar => {
                if let Some(default_str) = field.default_value {
                    map.insert(key, ConfigValue::Scalar(default_str.to_string()));
                }
            }
        }
    }
    map
}