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 System.Text;
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();
    }
}