in src/AWS.Deploy.CLI/ConsoleUtilities.cs [161:229]
public T AskUserToChoose<T>(IList<T> options, string title, T? defaultValue, string? defaultChoosePrompt = null)
where T : IUserInputOption
{
var choosePrompt = !(string.IsNullOrEmpty(defaultChoosePrompt)) ? defaultChoosePrompt : "Choose option";
if (!string.IsNullOrEmpty(title))
{
var dashLength = -1;
foreach(var line in title.Split('\n'))
{
var length = line.Trim().Length;
if(dashLength < length)
{
dashLength = length;
}
}
_interactiveService.WriteLine(title);
_interactiveService.WriteLine(new string('-', dashLength));
}
var defaultValueIndex = -1;
for (var i = 0; i < options.Count; i++)
{
if (string.Equals(options[i].Name, defaultValue?.Name))
{
defaultValueIndex = i + 1;
break;
}
}
var optionNumber = 1;
var padLength = options.Count.ToString().Length;
foreach (var option in options)
{
var optionText = $"{optionNumber.ToString().PadRight(padLength)}: {option.Name}";
if(optionNumber == defaultValueIndex)
{
optionText += " (default)";
}
_interactiveService.WriteLine(optionText);
if (!string.IsNullOrEmpty(option.Description))
{
_interactiveService.WriteLine($"{option.Description}");
_interactiveService.WriteLine(Environment.NewLine);
}
optionNumber++;
}
if (defaultValueIndex != -1)
{
_interactiveService.WriteLine(choosePrompt + $" (default {defaultValueIndex}):");
}
else
{
if(options.Count == 1)
{
_interactiveService.WriteLine(choosePrompt + " (default 1):");
defaultValueIndex = 1;
defaultValue = options[0];
}
else
{
_interactiveService.WriteLine(choosePrompt + ":");
}
}
return ReadOptionFromUser(options, defaultValueIndex);
}