using Cysharp.Threading.Tasks.Internal; using System; using System.Threading; namespace Cysharp.Threading.Tasks.Linq { public static partial class UniTaskAsyncEnumerable { public static IUniTaskAsyncEnumerable Cast(this IUniTaskAsyncEnumerable source) { Error.ThrowArgumentNullException(source, nameof(source)); return new Cast(source); } } internal sealed class Cast : IUniTaskAsyncEnumerable { readonly IUniTaskAsyncEnumerable source; public Cast(IUniTaskAsyncEnumerable source) { this.source = source; } public IUniTaskAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default) { return new _Cast(source, cancellationToken); } class _Cast : AsyncEnumeratorBase { public _Cast(IUniTaskAsyncEnumerable source, CancellationToken cancellationToken) : base(source, cancellationToken) { } protected override bool TryMoveNextCore(bool sourceHasCurrent, out bool result) { if (sourceHasCurrent) { Current = (TResult)SourceCurrent; result = true; return true; } result = false; return true; } } } }