| File: Commands\PackageSearch\PackageSearchResultJsonRenderer.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. #nullable disable using System.Collections.Generic; using System.Text.Json; using System.Text.Json.Serialization; using NuGet.Configuration; using NuGet.Protocol.Core.Types; namespace NuGet.CommandLine.XPlat { internal class PackageSearchResultJsonRenderer : IPackageSearchResultRenderer { private ILoggerWithColor _logger; private PackageSearchVerbosity _verbosity; private bool _exactMatch; private SearchMainOutput _packageSearchMainOutput; public PackageSearchResultJsonRenderer(ILoggerWithColor loggerWithColor, PackageSearchVerbosity verbosity, bool exactMatch) { _logger = loggerWithColor; _verbosity = verbosity; _exactMatch = exactMatch; } public void Add(PackageSource source, IEnumerable<IPackageSearchMetadata> completedSearch) { PackageSearchResult packageSearchResult = new PackageSearchResult(source.Name); foreach (IPackageSearchMetadata metadata in completedSearch) { packageSearchResult.Packages.Add(metadata); } _packageSearchMainOutput.SearchResult.Add(packageSearchResult); } public void Add(PackageSource source, PackageSearchProblem packageSearchProblem) { PackageSearchResult packageSearchResult = new PackageSearchResult(source.Name) { Problems = new List<PackageSearchProblem>() { packageSearchProblem } }; _packageSearchMainOutput.SearchResult.Add(packageSearchResult); } public void Finish() { var options = new JsonSerializerOptions { WriteIndented = true, Converters = { new SearchResultPackagesConverter(_verbosity, _exactMatch) }, DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }; var json = JsonSerializer.Serialize(_packageSearchMainOutput, new PackageSearchJsonContext(options).SearchMainOutput); _logger.LogMinimal(json); } public void Add(PackageSearchProblem packageSearchProblem) { _packageSearchMainOutput.Problems.Add(packageSearchProblem); } public void Start() { _packageSearchMainOutput = new SearchMainOutput(); } } }