File: Commands\NuGet\Remove\DotnetNuGetRemoveCommand.cs
Web Access
Project: src\nuget-client\src\NuGet.Core\NuGet.CommandLine.XPlat\NuGet.CommandLine.XPlat.csproj (NuGet.CommandLine.XPlat)
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.CommandLine;
using System.Threading.Tasks;
using NuGet.Commands;

namespace NuGet.CommandLine.XPlat.Commands.NuGet.Remove
{
    internal static class DotnetNuGetRemoveCommand
    {
        internal static void Register(Command parent, Func<ILoggerWithColor> getLogger)
        {
            var removeCmd = new Command("remove", Strings.Remove_Description);

            RegisterRemoveSource(removeCmd, getLogger);
            RegisterRemoveClientCert(removeCmd, getLogger);

            parent.Subcommands.Add(removeCmd);
        }

        private static void RegisterRemoveSource(Command parent, Func<ILoggerWithColor> getLogger)
        {
            var sourceCmd = new Command("source", Strings.RemoveSourceCommandDescription);

            var nameArg = new Argument<string>("name") { Description = Strings.SourcesCommandNameDescription };
            var configfile = new Option<string>("--configfile") { Description = Strings.Option_ConfigFile };

            sourceCmd.Arguments.Add(nameArg);
            sourceCmd.Options.Add(configfile);

            sourceCmd.SetAction((parseResult, cancellationToken) =>
            {
                var args = new RemoveSourceArgs()
                {
                    Name = parseResult.GetValue(nameArg),
                    Configfile = parseResult.GetValue(configfile),
                };

                RemoveSourceRunner.Run(args, () => getLogger());
                return Task.FromResult(0);
            });

            parent.Subcommands.Add(sourceCmd);
        }

        private static void RegisterRemoveClientCert(Command parent, Func<ILoggerWithColor> getLogger)
        {
            var clientCertCmd = new Command("client-cert", Strings.RemoveClientCertCommandDescription);

            var packagesource = new Option<string>("--package-source", "-s") { Description = Strings.Option_PackageSource };
            var configfile = new Option<string>("--configfile") { Description = Strings.Option_ConfigFile };

            clientCertCmd.Options.Add(packagesource);
            clientCertCmd.Options.Add(configfile);

            clientCertCmd.SetAction((parseResult, cancellationToken) =>
            {
                var args = new RemoveClientCertArgs()
                {
                    PackageSource = parseResult.GetValue(packagesource),
                    Configfile = parseResult.GetValue(configfile),
                };

                RemoveClientCertRunner.Run(args, () => getLogger());
                return Task.FromResult(0);
            });

            parent.Subcommands.Add(clientCertCmd);
        }
    }
}