public T AskUserToChoose()

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);
        }