diff --git a/src/Amazon.Common.DotNetCli.Tools/Commands/BaseCommand.cs b/src/Amazon.Common.DotNetCli.Tools/Commands/BaseCommand.cs index a69e659..9bcdf6d 100644 --- a/src/Amazon.Common.DotNetCli.Tools/Commands/BaseCommand.cs +++ b/src/Amazon.Common.DotNetCli.Tools/Commands/BaseCommand.cs @@ -450,15 +450,30 @@ public Dictionary GetKeyValuePairOrDefault(Dictionary dict: + return dict; + case string[] arr: + return new Dictionary(arr.Select(item => + { + var idx = item.IndexOf('='); + if (idx == -1) throw new Exception("Arrays of Key Value Pairs must be in the form of key=value"); + var key = item[..idx].Trim(); + var value = item[(idx + 1)..].Trim(); + return new KeyValuePair(key, value); + })); + case string str: + if (!string.IsNullOrEmpty(str)) + { + return Utilities.ParseKeyValueOption(str); + } + break; } - else if (required && !this.DisableInteractive) + + if (required && !this.DisableInteractive) { var response = PromptForValue(option); if (string.IsNullOrEmpty(response)) @@ -466,7 +481,8 @@ public Dictionary GetKeyValuePairOrDefault(Dictionary(); foreach (var key in this._rootData[fullSwitchName].PropertyNames) { - obj[key] = this._rootData[key]?.ToString(); + obj[key] = this._rootData[fullSwitchName][key]?.ToString(); } return obj; } @@ -133,6 +134,41 @@ public string GetValueAsString(CommandOption option) return null; } + /// + /// Gets the default if it exists as a dictionary. + /// + /// + /// + public IDictionary GetValueAsDictionary(CommandOption option) + { + var key = option.Switch.Substring(2); + var data = this._rootData[key]; + if (data == null) + return null; + + if (data.IsObject) + { + return data.PropertyNames + .ToDictionary(name => name, name => data[name].ToString()); + } + + if (data.IsArray) + { + var results = new Dictionary(data.Count); + for (var i = 0; i < data.Count; i++) + { + var item = data[i].ToString() ?? ""; + var idx = item.IndexOf('='); + if (idx == -1) throw new Exception("Arrays of Key Value Pairs must be in the form of key=value"); + var itemKey = item[..idx].Trim(); + var itemValue = item[(idx + 1)..].Trim(); + results[itemKey] = itemValue; + } + return results; + } + + return null; + } public static string FormatCommaDelimitedList(string[] values) { diff --git a/src/Amazon.Lambda.Tools/LambdaToolsDefaults.cs b/src/Amazon.Lambda.Tools/LambdaToolsDefaults.cs index 4c3d673..ba8990b 100644 --- a/src/Amazon.Lambda.Tools/LambdaToolsDefaults.cs +++ b/src/Amazon.Lambda.Tools/LambdaToolsDefaults.cs @@ -83,6 +83,9 @@ public IDictionary CloudFormationTemplateParameters { get { + var dict = GetValueAsDictionary(LambdaDefinedCommandOptions.ARGUMENT_CLOUDFORMATION_TEMPLATE_PARAMETER); + if (dict != null) return dict; + var str = GetValueAsString(LambdaDefinedCommandOptions.ARGUMENT_CLOUDFORMATION_TEMPLATE_PARAMETER); if (string.IsNullOrEmpty(str)) return null; @@ -102,6 +105,9 @@ public IDictionary EnvironmentVariables { get { + var dict = GetValueAsDictionary(LambdaDefinedCommandOptions.ARGUMENT_ENVIRONMENT_VARIABLES); + if (dict != null) return dict; + var str = GetValueAsString(LambdaDefinedCommandOptions.ARGUMENT_ENVIRONMENT_VARIABLES); if (string.IsNullOrEmpty(str)) return null;