File: ToolCommandName.cs
Web Access
Project: ..\..\..\src\Cli\Microsoft.DotNet.Cli.Utils\Microsoft.DotNet.Cli.Utils.csproj (Microsoft.DotNet.Cli.Utils)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
namespace Microsoft.DotNet.Cli.Utils;
 
public readonly struct ToolCommandName : IEquatable<ToolCommandName>
{
    public ToolCommandName(string name)
    {
        if (name == null)
        {
            throw new ArgumentNullException(nameof(name));
        }
 
        if (name == string.Empty)
        {
            throw new ArgumentException(message: "cannot be empty", paramName: nameof(name));
        }
 
        Value = name;
    }
 
    public string Value { get; }
 
    public override string ToString() => Value;
 
    public bool Equals(ToolCommandName other)
    {
        return string.Equals(Value, other.Value, StringComparison.OrdinalIgnoreCase);
    }
 
    public override bool Equals(object? obj)
    {
        return obj is ToolCommandName name && Equals(name);
    }
 
    public override int GetHashCode()
    {
        return StringComparer.OrdinalIgnoreCase.GetHashCode(Value);
    }
 
    public static bool operator ==(ToolCommandName name1, ToolCommandName name2)
    {
        return name1.Equals(name2);
    }
 
    public static bool operator !=(ToolCommandName name1, ToolCommandName name2)
    {
        return !name1.Equals(name2);
    }
 
    public static ToolCommandName[] Convert(string[] toolCommandNameStringArray)
    {
        var toolCommandNames = new ToolCommandName[toolCommandNameStringArray.Length];
        for (int i = 0; i < toolCommandNameStringArray.Length; i++)
        {
            toolCommandNames[i] = new ToolCommandName(toolCommandNameStringArray[i]);
        }
 
        return toolCommandNames;
    }
}