| File: Commands\Tool\Search\ToolSearchCommand.cs | Web Access |
| Project: src\sdk\src\Cli\dotnet\dotnet.csproj (dotnet) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using System.CommandLine; using Microsoft.DotNet.Cli.NugetSearch; using Microsoft.DotNet.Cli.Utils; namespace Microsoft.DotNet.Cli.Commands.Tool.Search; internal sealed class ToolSearchCommand( ParseResult result, INugetToolSearchApiRequest nugetToolSearchApiRequest = null) : CommandBase<ToolSearchCommandDefinition>(result) { private readonly INugetToolSearchApiRequest _nugetToolSearchApiRequest = nugetToolSearchApiRequest ?? new NugetToolSearchApiRequest(); private readonly SearchResultPrinter _searchResultPrinter = new(Reporter.Output); public override int Execute() { var isDetailed = _parseResult.GetValue(Definition.DetailOption); if (!PathUtility.CheckForNuGetInNuGetConfig()) { Reporter.Output.WriteLine(CliCommandStrings.NeedNuGetInConfig); return 0; } IReadOnlyCollection<SearchResultPackage> searchResultPackages = NugetSearchApiResultDeserializer.Deserialize( _nugetToolSearchApiRequest.GetResult(GetNugetSearchApiParameter()).GetAwaiter().GetResult()); _searchResultPrinter.Print(isDetailed, searchResultPackages); return 0; } internal NugetSearchApiParameter GetNugetSearchApiParameter() => new( searchTerm: _parseResult.GetValue(Definition.SearchTermArgument), skip: GetParsedResultAsInt(Definition.SkipOption), take: GetParsedResultAsInt(Definition.TakeOption), prerelease: _parseResult.GetValue(Definition.PrereleaseOption)); private int? GetParsedResultAsInt(Option<string> alias) { var valueFromParser = _parseResult.GetValue(alias); if (string.IsNullOrWhiteSpace(valueFromParser)) { return null; } if (int.TryParse(valueFromParser, out int i)) { return i; } else { throw new GracefulException( string.Format( CliStrings.InvalidInputTypeInteger, alias)); } } }