File: src\UsageReport\XmlParsingHelpers.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 NuGet.Versioning;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml.Linq;

namespace Microsoft.DotNet.SourceBuild.Tasks.UsageReport;

internal static class XmlParsingHelpers
{
    public static XElement ToXElement(this PackageIdentity ident) => new XElement(
        "PackageIdentity",
        new XAttribute("Id", ident.Id),
        new XAttribute("Version", ident.Version.OriginalVersion));

    public static XAttribute ToXAttributeIfNotNull(this object value, string name) =>
        value == null ? null : new XAttribute(name, value);

    public static XAttribute ToXAttributeIfTrue(this bool value, string name) =>
        value == false ? null : new XAttribute(name, value);

    public static PackageIdentity ParsePackageIdentity(XElement xml) => new PackageIdentity(
        xml.Attribute("Id").Value,
        NuGetVersion.Parse(xml.Attribute("Version").Value));

    public static IOrderedEnumerable<T> OrderByOrdinal<T>(
        this IEnumerable<T> source,
        Func<T, string> selector)
    {
        return source.OrderBy(selector, StringComparer.Ordinal);
    }

    public static IOrderedEnumerable<T> ThenByOrdinal<T>(
        this IOrderedEnumerable<T> source,
        Func<T, string> selector)
    {
        return source.ThenBy(selector, StringComparer.Ordinal);
    }
}