File: EmbeddedLanguages\AspNetCoreVirtualChar.cs
Web Access
Project: src\src\Features\ExternalAccess\AspNetCore\Microsoft.CodeAnalysis.ExternalAccess.AspNetCore.csproj (Microsoft.CodeAnalysis.ExternalAccess.AspNetCore)
// 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 file in the project root for more information.
 
using System;
using Microsoft.CodeAnalysis.EmbeddedLanguages.VirtualChars;
using Microsoft.CodeAnalysis.Text;
 
namespace Microsoft.CodeAnalysis.ExternalAccess.AspNetCore.EmbeddedLanguages;
 
internal readonly struct AspNetCoreVirtualChar : IEquatable<AspNetCoreVirtualChar>
{
    internal readonly VirtualChar VirtualChar;
 
    internal AspNetCoreVirtualChar(VirtualChar virtualChar)
    {
        VirtualChar = virtualChar;
    }
 
    /// <summary>
    /// Returns the Unicode scalar value as an integer.
    /// </summary>
    public int RuneValue
    {
        // Rune is an internal shim with netstandard2.0 and accessing it throws an internal access exception.
        // Expose integer value. Can be converted back to Rune by caller.
        get => VirtualChar.Rune.Value;
    }
 
    /// <inheritdoc cref="VirtualChar.SurrogateChar"/>
    public char SurrogateChar => VirtualChar.SurrogateChar;
 
    /// <inheritdoc cref="VirtualChar.Span"/>
    public TextSpan Span => VirtualChar.Span;
 
    /// <inheritdoc cref="VirtualChar.Value"/>
    public int Value => VirtualChar.Value;
 
    /// <inheritdoc cref="VirtualChar.ToString"/>
    public override string ToString() => VirtualChar.ToString();
 
    /// <inheritdoc cref="VirtualChar.Equals(object)"/>
    public override bool Equals(object? obj) => obj is AspNetCoreVirtualChar vc && Equals(vc);
 
    /// <inheritdoc cref="VirtualChar.Equals(VirtualChar)"/>
    public bool Equals(AspNetCoreVirtualChar other) => VirtualChar.Equals(other.VirtualChar);
 
    /// <inheritdoc cref="VirtualChar.GetHashCode"/>
    public override int GetHashCode() => VirtualChar.GetHashCode();
}