File: MetadataContextId.cs
Web Access
Project: src\src\ExpressionEvaluator\Core\Source\ExpressionCompiler\Microsoft.CodeAnalysis.ExpressionCompiler.csproj (Microsoft.CodeAnalysis.ExpressionEvaluator.ExpressionCompiler)
// 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 Roslyn.Utilities;
 
namespace Microsoft.CodeAnalysis.ExpressionEvaluator
{
    // Wrapper around Guid to ensure callers have asked for the correct id
    // rather than simply using the ModuleVersionId (which is unnecessary
    // when the Compilation references all loaded assemblies).
    internal readonly struct MetadataContextId : IEquatable<MetadataContextId>
    {
        internal readonly Guid ModuleVersionId;
 
        internal MetadataContextId(Guid moduleVersionId)
        {
            ModuleVersionId = moduleVersionId;
        }
 
        public bool Equals(MetadataContextId other)
            => ModuleVersionId.Equals(other.ModuleVersionId);
 
        public override bool Equals(object obj)
            => obj is MetadataContextId && Equals((MetadataContextId)obj);
 
        public override int GetHashCode()
            => ModuleVersionId.GetHashCode();
 
        internal static MetadataContextId GetContextId(Guid moduleVersionId, MakeAssemblyReferencesKind kind)
        {
            return kind switch
            {
                MakeAssemblyReferencesKind.AllAssemblies => default,
                MakeAssemblyReferencesKind.AllReferences => new MetadataContextId(moduleVersionId),
                _ => throw ExceptionUtilities.UnexpectedValue(kind),
            };
        }
    }
}