File: ExternalAccess\UnitTesting\API\UnitTestingInvocationReasons.cs
Web Access
Project: ..\..\..\src\Features\Core\Portable\Microsoft.CodeAnalysis.Features.csproj (Microsoft.CodeAnalysis.Features)
// 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.Collections;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Runtime.Serialization;
 
namespace Microsoft.CodeAnalysis.ExternalAccess.UnitTesting.Api
{
    [DataContract]
    internal partial struct UnitTestingInvocationReasons : IEnumerable<string>
    {
        public static readonly UnitTestingInvocationReasons Empty = new(ImmutableHashSet<string>.Empty);
 
        [DataMember(Order = 0)]
        private readonly ImmutableHashSet<string> _reasons;
 
        public UnitTestingInvocationReasons(string reason)
            : this(ImmutableHashSet.Create(reason))
        {
        }
 
        public UnitTestingInvocationReasons(ImmutableHashSet<string> reasons)
            => _reasons = reasons ?? ImmutableHashSet<string>.Empty;
 
        public bool IsEmpty => _reasons.IsEmpty;
 
        public bool Contains(string reason)
            => _reasons.Contains(reason);
 
        public UnitTestingInvocationReasons With(UnitTestingInvocationReasons invocationReasons)
            => new(_reasons.Union(invocationReasons._reasons));
 
        public UnitTestingInvocationReasons With(string reason)
            => new(_reasons.Add(reason));
 
        public ImmutableHashSet<string>.Enumerator GetEnumerator()
            => _reasons.GetEnumerator();
 
        IEnumerator<string> IEnumerable<string>.GetEnumerator()
            => _reasons.GetEnumerator();
 
        IEnumerator IEnumerable.GetEnumerator()
            => _reasons.GetEnumerator();
 
        public override string ToString()
            => string.Join("|", _reasons ?? ImmutableHashSet<string>.Empty);
    }
}