File: FrameworkDependencyFlagsUtils.cs
Web Access
Project: src\src\nuget-client\src\NuGet.Core\NuGet.LibraryModel\NuGet.LibraryModel.csproj (NuGet.LibraryModel)
// 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.

using System;
using System.Collections.Generic;
using System.Linq;

namespace NuGet.LibraryModel
{
    public static class FrameworkDependencyFlagsUtils
    {
        public static readonly FrameworkDependencyFlags Default = FrameworkDependencyFlags.None;

        /// <summary>
        /// Convert set of flag strings into a FrameworkDependencyFlags.
        /// </summary>
        /// <param name="values">A list of values to generate the flags out of</param>
        public static FrameworkDependencyFlags GetFlags(IEnumerable<string>? values)
        {
            var result = FrameworkDependencyFlags.None;

            if (values != null)
            {
                foreach (var value in values)
                {
                    if (Enum.TryParse<FrameworkDependencyFlags>(value, ignoreCase: true, result: out var flag))
                    {
                        result |= flag;
                    }
                }
            }

            return result;
        }

        /// <summary>
        /// Convert framework dependency flags to a friendly string.
        /// </summary>
        public static string GetFlagString(FrameworkDependencyFlags flags)
        {
            switch (flags)
            {
                case FrameworkDependencyFlags.All:
                    return "all";
                case FrameworkDependencyFlags.None:
                default:
                    return "none";
            }
        }

        /// <summary>
        /// Convert set of flag strings into a LibraryIncludeFlags.
        /// If the <paramref name="flags"/> is null, it returns the default value of <see cref="FrameworkDependencyFlags.None"/>
        /// </summary>
        public static FrameworkDependencyFlags GetFlags(string? flags)
        {
            var result = FrameworkDependencyFlags.None;

            if (!string.IsNullOrEmpty(flags))
            {
                var splitFlags = flags!.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
                    .Select(s => s.Trim())
                    .Where(s => !string.IsNullOrEmpty(s))
                    .ToArray();

                if (splitFlags.Length > 0)
                {
                    result = GetFlags(splitFlags);
                }
            }

            return result;
        }
    }
}