using System; using System.Collections; using System.Collections.Generic; using System.IO; namespace Kalk.Core.Helpers { class LineReader : IEnumerable { private readonly Func _getReader; public LineReader(Func getReader) { this._getReader = getReader; } public IEnumerator GetEnumerator() { return new LineEnumerator(_getReader()); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } private class LineEnumerator : IEnumerator { private readonly TextReader _reader; public LineEnumerator(TextReader reader) { _reader = reader; } public bool MoveNext() { Current = _reader.ReadLine(); return Current != null; } public void Reset() { throw new NotSupportedException("Cannot reset a line reader"); } public string Current { get; private set; } object? IEnumerator.Current => Current; public void Dispose() { _reader.Dispose(); } } } }