File: Commands\Workload\WorkloadCommandDefinition.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;
using Microsoft.DotNet.Cli.CommandLine;
using Microsoft.DotNet.Cli.Commands.Workload.Clean;
using Microsoft.DotNet.Cli.Commands.Workload.Config;
using Microsoft.DotNet.Cli.Commands.Workload.Elevate;
using Microsoft.DotNet.Cli.Commands.Workload.History;
using Microsoft.DotNet.Cli.Commands.Workload.Install;
using Microsoft.DotNet.Cli.Commands.Workload.List;
using Microsoft.DotNet.Cli.Commands.Workload.Repair;
using Microsoft.DotNet.Cli.Commands.Workload.Restore;
using Microsoft.DotNet.Cli.Commands.Workload.Search;
using Microsoft.DotNet.Cli.Commands.Workload.Uninstall;
using Microsoft.DotNet.Cli.Commands.Workload.Update;
using Command = System.CommandLine.Command;

namespace Microsoft.DotNet.Cli.Commands.Workload;

internal sealed class WorkloadCommandDefinition : Command
{
    private const string Link = "https://aka.ms/dotnet-workload";
    public new const string Name = "workload";

    public Option<bool> InfoOption = new("--info")
    {
        Description = CommandDefinitionStrings.WorkloadInfoDescription,
        Arity = ArgumentArity.Zero
    };

    public readonly Option<bool> VersionOption = new("--version")
    {
        Description = CommandDefinitionStrings.WorkloadVersionDescription,
        Arity = ArgumentArity.Zero
    };

    public readonly WorkloadInstallCommandDefinition InstallCommand = new();
    public readonly WorkloadUpdateCommandDefinition UpdateCommand = new();
    public readonly WorkloadListCommandDefinition ListCommand = new();
    public readonly WorkloadSearchCommandDefinition SearchCommand = new();
    public readonly WorkloadUninstallCommandDefinition UninstallCommand = new();
    public readonly WorkloadRepairCommandDefinition RepairCommand = new();
    public readonly WorkloadRestoreCommandDefinition RestoreCommand = new();
    public readonly WorkloadCleanCommandDefinition CleanCommand = new();
    public readonly WorkloadElevateCommandDefinition ElevateCommand = new();
    public readonly WorkloadConfigCommandDefinition ConfigCommand = new();
    public readonly WorkloadHistoryCommandDefinition HistoryCommand = new();

    public WorkloadCommandDefinition()
        : base(Name, CommandDefinitionStrings.WorkloadCommandDescription)
    {
        this.DocsLink = Link;

        Subcommands.Add(InstallCommand);
        Subcommands.Add(UpdateCommand);
        Subcommands.Add(ListCommand);
        Subcommands.Add(SearchCommand);
        Subcommands.Add(UninstallCommand);
        Subcommands.Add(RepairCommand);
        Subcommands.Add(RestoreCommand);
        Subcommands.Add(CleanCommand);
        Subcommands.Add(ElevateCommand);
        Subcommands.Add(ConfigCommand);
        Subcommands.Add(HistoryCommand);

        Options.Add(InfoOption);
        Options.Add(VersionOption);

        Validators.Add(commandResult =>
        {
            if (commandResult.HasOption(InfoOption) && commandResult.HasOption(VersionOption) && !commandResult.Children.Any(child => child is System.CommandLine.Parsing.CommandResult))
            {
                commandResult.AddError(CommandDefinitionStrings.RequiredCommandNotPassed);
            }
        });
    }
}