MCPcopy Index your code
hub / github.com/PowerShell/DSC / merge_parameters

Function merge_parameters

dsc/src/util.rs:656–690  ·  view source on GitHub ↗

Merge two parameter sets, with inline parameters taking precedence over file parameters. Top-level keys (like "parameters") are merged recursively, but parameter values themselves are replaced (not merged) when specified inline. # Arguments `file_params` - Parameters from file (JSON or YAML format) `inline_params` - Inline parameters (JSON or YAML format) that take precedence # Returns `Result

(file_params: &str, inline_params: &str)

Source from the content-addressed store, hash-verified

654/// - Either parameter set cannot be parsed as valid JSON or YAML
655/// - The merged result cannot be serialized to JSON
656pub fn merge_parameters(file_params: &str, inline_params: &str) -> Result<String, DscError> {
657 use serde_json::Value;
658
659 // Convert both parameter inputs to maps
660 let mut file_map = params_to_map(file_params, "FileParameters")?;
661 let inline_map = params_to_map(inline_params, "InlineParameters")?;
662
663 // Merge top-level keys
664 for (key, inline_value) in &inline_map {
665 if key == "parameters" {
666 // Special handling for "parameters" key - merge at parameter name level only
667 // Within each parameter name, inline replaces (not merges)
668 if let Some(file_params_value) = file_map.get_mut("parameters") {
669 if let (Some(file_params_obj), Some(inline_params_obj)) = (file_params_value.as_object_mut(), inline_value.as_object()) {
670 // For each parameter in inline, replace (not merge) in file
671 for (param_name, param_value) in inline_params_obj {
672 file_params_obj.insert(param_name.clone(), param_value.clone());
673 }
674 } else {
675 // If one is not an object, inline replaces completely
676 file_map.insert(key.clone(), inline_value.clone());
677 }
678 } else {
679 // "parameters" key doesn't exist in file, add it
680 file_map.insert(key.clone(), inline_value.clone());
681 }
682 } else {
683 // For other top-level keys, inline value replaces file value
684 file_map.insert(key.clone(), inline_value.clone());
685 }
686 }
687
688 let merged = Value::Object(file_map);
689 Ok(serde_json::to_string(&merged)?)
690}

Callers 1

mainFunction · 0.85

Calls 2

params_to_mapFunction · 0.85
to_stringFunction · 0.50

Tested by

no test coverage detected