File: GitDataReader\GitVariableName.cs
Web Access
Project: src\src\sourcelink\src\Microsoft.Build.Tasks.Git\Microsoft.Build.Tasks.Git.csproj (Microsoft.Build.Tasks.Git)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the License.txt file in the project root for more information.

using System;

namespace Microsoft.Build.Tasks.Git;

internal readonly struct GitVariableName(string sectionName, string subsectionName, string variableName) : IEquatable<GitVariableName>
{
    public static readonly StringComparer SectionNameComparer = StringComparer.OrdinalIgnoreCase;
    public static readonly StringComparer SubsectionNameComparer = StringComparer.Ordinal;
    public static readonly StringComparer VariableNameComparer = StringComparer.OrdinalIgnoreCase;

    public readonly string SectionName = sectionName;
    public readonly string SubsectionName = subsectionName;
    public readonly string VariableName = variableName;

    public bool SectionNameEquals(string name)
        => SectionNameComparer.Equals(SectionName, name);

    public bool SubsectionNameEquals(string name)
        => SubsectionNameComparer.Equals(SubsectionName, name);

    public bool VariableNameEquals(string name)
        => VariableNameComparer.Equals(VariableName, name);

    public bool Equals(GitVariableName other)
        => SectionNameEquals(other.SectionName) &&
           SubsectionNameEquals(other.SubsectionName) &&
           VariableNameEquals(other.VariableName);

    public override bool Equals(object? obj)
        => obj is GitVariableName other && Equals(other);

    public override int GetHashCode()
        => SectionNameComparer.GetHashCode(SectionName) ^
           SubsectionNameComparer.GetHashCode(SubsectionName) ^
           VariableNameComparer.GetHashCode(VariableName);

    public override string ToString()
        => (SubsectionName.Length == 0) ?
            SectionName + "." + VariableName :
            SectionName + "." + SubsectionName + "." + VariableName;
}