File: Commands\New\LegacyFilterOptions.cs
Web Access
Project: src\src\sdk\src\Cli\Microsoft.DotNet.Cli.Definitions\Microsoft.DotNet.Cli.Definitions.csproj (Microsoft.DotNet.Cli.Definitions)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.CommandLine;

namespace Microsoft.DotNet.Cli.Commands.New;

public sealed class FilterOptions
{
    public required Option<string> AuthorOption { get; init; }
    public required Option<string> BaselineOption { get; init; }
    public required Option<string> LanguageOption { get; init; }
    public required Option<string> TypeOption { get; init; }
    public required Option<string> TagOption { get; init; }
    public required Option<string>? PackageOption { get; init; }

    public IEnumerable<Option> AllOptions
    {
        get
        {
            yield return AuthorOption;
            yield return BaselineOption;
            yield return LanguageOption;
            yield return TypeOption;
            yield return TagOption;

            if (PackageOption != null)
            {
                yield return PackageOption;
            }
        }
    }

    public IEnumerable<string> AllNames
        => GetAllNames(hasPackageOption: PackageOption != null);

    public static IEnumerable<string> GetAllNames(bool hasPackageOption)
    {
        yield return SharedOptionsFactory.AuthorOptionName;
        yield return SharedOptionsFactory.BaselineOptionName;
        yield return SharedOptionsFactory.LanguageOptionName;
        yield return SharedOptionsFactory.TypeOptionName;
        yield return SharedOptionsFactory.TagOptionName;

        if (hasPackageOption)
        {
            yield return SharedOptionsFactory.PackageOptionName;
        }
    }

    public static FilterOptions CreateLegacy()
        => new()
        {
            AuthorOption = SharedOptionsFactory.CreateAuthorOption().AsHidden(),
            BaselineOption = SharedOptionsFactory.CreateBaselineOption().AsHidden(),
            LanguageOption = SharedOptionsFactory.CreateLanguageOption().AsHidden(),
            TypeOption = SharedOptionsFactory.CreateTypeOption().AsHidden(),
            TagOption = SharedOptionsFactory.CreateTagOption().AsHidden(),
            PackageOption = SharedOptionsFactory.CreatePackageOption().AsHidden(),
        };

    public static FilterOptions CreateSupported(bool hasPackageOption)
        => new()
        {
            AuthorOption = SharedOptionsFactory.CreateAuthorOption(),
            BaselineOption = SharedOptionsFactory.CreateBaselineOption(),
            LanguageOption = SharedOptionsFactory.CreateLanguageOption(),
            TypeOption = SharedOptionsFactory.CreateTypeOption(),
            TagOption = SharedOptionsFactory.CreateTagOption(),
            PackageOption = hasPackageOption ? SharedOptionsFactory.CreatePackageOption() : null,
        };
}