File: Language\TagHelperAttributeMatch.cs
Web Access
Project: src\src\roslyn\src\Razor\src\Compiler\Microsoft.CodeAnalysis.Razor.Compiler\src\Microsoft.CodeAnalysis.Razor.Compiler.csproj (Microsoft.CodeAnalysis.Razor.Compiler)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System;
using System.Diagnostics.CodeAnalysis;

namespace Microsoft.AspNetCore.Razor.Language;

internal struct TagHelperAttributeMatch(
    string name,
    BoundAttributeDescriptor attribute,
    BoundAttributeParameterDescriptor? parameter = null)
{
    public string Name { get; } = name;
    public BoundAttributeDescriptor Attribute { get; } = attribute;
    public BoundAttributeParameterDescriptor? Parameter { get; } = parameter;

    private bool? _isIndexerMatch;

    public bool IsIndexerMatch
        => _isIndexerMatch ??= TagHelperMatchingConventions.SatisfiesBoundAttributeIndexer(Attribute, Name.AsSpan());

    [MemberNotNullWhen(true, nameof(Parameter))]
    public readonly bool IsParameterMatch => Parameter is not null;

    public bool ExpectsStringValue
    {
        get
        {
            if (IsParameterMatch)
            {
                return Parameter.IsStringProperty;
            }

            return Attribute.IsStringProperty || (IsIndexerMatch && Attribute.IsIndexerStringProperty);
        }
    }

    public bool ExpectsBooleanValue
    {
        get
        {
            if (IsParameterMatch)
            {
                return Parameter.IsBooleanProperty;
            }

            return Attribute.IsBooleanProperty || (IsIndexerMatch && Attribute.IsIndexerBooleanProperty);
        }
    }
}