// 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.Globalization;
using CsvHelper.TypeConversion;
using System.Reflection;
using System.Collections.Generic;
using System.IO;
namespace CsvHelper.Configuration
{
///
/// Configuration used for the .
///
public interface IReaderConfiguration : IParserConfiguration
{
///
/// Gets a value indicating if the
/// CSV file has a header record.
/// Default is true.
///
bool HasHeaderRecord { get; }
///
/// Gets the function that is called when a header validation check is ran. The default function
/// will throw a if there is no header for a given member mapping.
/// You can supply your own function to do other things like logging the issue instead of throwing an exception.
///
HeaderValidated HeaderValidated { get; }
///
/// Gets the function that is called when a missing field is found. The default function will
/// throw a . You can supply your own function to do other things
/// like logging the issue instead of throwing an exception.
///
MissingFieldFound MissingFieldFound { get; }
///
/// Gets the function that is called when a reading exception occurs.
/// The default function will re-throw the given exception. If you want to ignore
/// reading exceptions, you can supply your own function to do other things like
/// logging the issue.
///
ReadingExceptionOccurred ReadingExceptionOccurred { get; }
///
/// Prepares the header field for matching against a member name.
/// The header field and the member name are both ran through this function.
/// You should do things like trimming, removing whitespace, removing underscores,
/// and making casing changes to ignore case.
///
PrepareHeaderForMatch PrepareHeaderForMatch { get; }
///
/// Determines if constructor parameters should be used to create
/// the class instead of the default constructor and members.
///
ShouldUseConstructorParameters ShouldUseConstructorParameters { get; }
///
/// Chooses the constructor to use for constructor mapping.
///
GetConstructor GetConstructor { get; }
///
/// Gets the name to use for the property of the dynamic object.
///
GetDynamicPropertyName GetDynamicPropertyName { get; }
///
/// Gets a value indicating whether references
/// should be ignored when auto mapping. true to ignore
/// references, otherwise false. Default is false.
///
bool IgnoreReferences { get; }
///
/// Gets the callback that will be called to
/// determine whether to skip the given record or not.
///
ShouldSkipRecord? ShouldSkipRecord { get; }
///
/// Gets a value indicating if private
/// member should be read from and written to.
/// true to include private member, otherwise false. Default is false.
///
bool IncludePrivateMembers { get; }
///
/// Gets a callback that will return the prefix for a reference header.
///
ReferenceHeaderPrefix ReferenceHeaderPrefix { get; }
///
/// Gets a value indicating whether changes in the column
/// count should be detected. If true, a
/// will be thrown if a different column count is detected.
///
bool DetectColumnCountChanges { get; }
///
/// Gets the member types that are used when auto mapping.
/// MemberTypes are flags, so you can choose more than one.
/// Default is Properties.
///
MemberTypes MemberTypes { get; }
}
}