TeamCity.CSharpInteractive/ConsoleSource.cs (29 lines of code) (raw):
// ReSharper disable ClassNeverInstantiated.Global
namespace TeamCity.CSharpInteractive;
using System.Collections;
using System.Diagnostics.CodeAnalysis;
[ExcludeFromCodeCoverage]
internal class ConsoleSource : ICodeSource, IEnumerator<string?>
{
private readonly CancellationToken _cancellationToken;
public ConsoleSource(CancellationToken cancellationToken) => _cancellationToken = cancellationToken;
public string Name => "Console";
public bool Internal => false;
public IEnumerator<string?> GetEnumerator() => this;
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
public string? Current { get; private set; } = string.Empty;
object? IEnumerator.Current => Current;
public bool MoveNext()
{
if (Current == default)
{
Task.Run(() => { Current = System.Console.In.ReadLine() ?? string.Empty; }, _cancellationToken).Wait(_cancellationToken);
}
else
{
Current = null;
}
return true;
}
public void Reset() { }
public void Dispose() { }
}