File: src\UsageReport\UsageData.cs
Web Access
Project: 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()
    };
}