// Copyright 2009-2022 Josh Close // This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0. // See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0. // https://github.com/JoshClose/CsvHelper using System; using System.Collections.Generic; using System.Threading.Tasks; using System.Threading; namespace CsvHelper { /// /// Defines methods used to read parsed data /// from a CSV file. /// public interface IReader : IReaderRow, IDisposable { /// /// Reads the header record without reading the first row. /// /// True if there are more records, otherwise false. bool ReadHeader(); /// /// Advances the reader to the next record. This will not read headers. /// You need to call then /// for the headers to be read. /// /// True if there are more records, otherwise false. bool Read(); /// /// Advances the reader to the next record. This will not read headers. /// You need to call then /// for the headers to be read. /// /// True if there are more records, otherwise false. Task ReadAsync(); /// /// Gets all the records in the CSV file and /// converts each to T. The Read method /// should not be used when using this. /// /// The of the record. /// An of records. IEnumerable GetRecords(); /// /// Gets all the records in the CSV file and converts /// each to T. The read method /// should not be used when using this. /// /// The of the record. /// The anonymous type definition to use for the records. /// An of records. IEnumerable GetRecords(T anonymousTypeDefinition); /// /// Gets all the records in the CSV file and /// converts each to T. The Read method /// should not be used when using this. /// /// The of the record. /// An of records. IEnumerable GetRecords(Type type); /// /// Enumerates the records hydrating the given record instance with row data. /// The record instance is re-used and not cleared on each enumeration. /// This only works for streaming rows. If any methods are called on the projection /// that force the evaluation of the IEnumerable, such as ToList(), the entire list /// will contain the same instance of the record, which is the last row. /// /// The type of the record. /// The record to fill each enumeration. /// An of records. IEnumerable EnumerateRecords(T record); #if !NET45 /// /// Gets all the records in the CSV file and /// converts each to T. The Read method /// should not be used when using this. /// /// The of the record. /// The cancellation token to stop the writing. /// An of records. IAsyncEnumerable GetRecordsAsync(CancellationToken cancellationToken = default(CancellationToken)); /// /// Gets all the records in the CSV file and converts /// each to T. The read method /// should not be used when using this. /// /// The of the record. /// The anonymous type definition to use for the records. /// The cancellation token to stop the writing. /// An of records. IAsyncEnumerable GetRecordsAsync(T anonymousTypeDefinition, CancellationToken cancellationToken = default(CancellationToken)); /// /// Gets all the records in the CSV file and /// converts each to T. The Read method /// should not be used when using this. /// /// The of the record. /// The cancellation token to stop the writing. /// An of records. IAsyncEnumerable GetRecordsAsync(Type type, CancellationToken cancellationToken = default(CancellationToken)); /// /// Enumerates the records hydrating the given record instance with row data. /// The record instance is re-used and not cleared on each enumeration. /// This only works for streaming rows. If any methods are called on the projection /// that force the evaluation of the IEnumerable, such as ToList(), the entire list /// will contain the same instance of the record, which is the last row. /// /// The type of the record. /// The record to fill each enumeration. /// /// The cancellation token to stop the writing. /// An of records. IAsyncEnumerable EnumerateRecordsAsync(T record, CancellationToken cancellationToken = default(CancellationToken)); #endif } }