File: src\UsageReport\UsageData.cs
Web Access
Project: src\src\Microsoft.DotNet.SourceBuild\tasks\Microsoft.DotNet.SourceBuild.Tasks.csproj (Microsoft.DotNet.SourceBuild.Tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using NuGet.Packaging.Core;
using System.Linq;
using System.Xml.Linq;
 
namespace Microsoft.DotNet.SourceBuild.Tasks.UsageReport
{
    public class UsageData
    {
        public string CreatedByRid { get; set; }
        public string[] ProjectDirectories { get; set; }
        public PackageIdentity[] NeverRestoredTarballPrebuilts { get; set; }
        public UsagePattern[] IgnorePatterns { get; set; }
        public Usage[] Usages { get; set; }
 
        public XElement ToXml() => new XElement(
            nameof(UsageData),
            CreatedByRid == null ? null : new XElement(
                nameof(CreatedByRid),
                CreatedByRid),
            ProjectDirectories?.Any() != true ? null : new XElement(
                nameof(ProjectDirectories),
                ProjectDirectories
                    .Select(dir => new XElement("Dir", dir))),
            NeverRestoredTarballPrebuilts?.Any() != true ? null : new XElement(
                nameof(NeverRestoredTarballPrebuilts),
                NeverRestoredTarballPrebuilts
                    .OrderBy(id => id)
                    .Select(id => id.ToXElement())),
            IgnorePatterns?.Any() != true ? null : new XElement(
                nameof(IgnorePatterns),
                IgnorePatterns
                    .Select(p => p.ToXml())),
            Usages?.Any() != true ? null : new XElement(
                nameof(Usages),
                Usages
                    .OrderBy(u => u.PackageIdentity)
                    .ThenByOrdinal(u => u.AssetsFile)
                    .Select(u => u.ToXml())));
 
        public static UsageData Parse(XElement xml) => new UsageData
        {
            CreatedByRid = xml.Element(nameof(CreatedByRid))
                ?.Value,
            ProjectDirectories =
                (xml.Element(nameof(ProjectDirectories))?.Elements()).NullAsEmpty()
                .Select(x => x.Value)
                .ToArray(),
            NeverRestoredTarballPrebuilts =
                (xml.Element(nameof(NeverRestoredTarballPrebuilts))?.Elements()).NullAsEmpty()
                .Select(XmlParsingHelpers.ParsePackageIdentity)
                .ToArray(),
            IgnorePatterns =
                (xml.Element(nameof(IgnorePatterns))?.Elements()).NullAsEmpty()
                .Select(UsagePattern.Parse)
                .ToArray(),
            Usages =
                (xml.Element(nameof(Usages))?.Elements()).NullAsEmpty()
                .Select(Usage.Parse)
                .ToArray()
        };
    }
}