From 2a1cd4fda8a4a8e649910d16b4dfa1ce7ae63543 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Fri, 12 May 2023 09:24:40 +0800 Subject: *misc --- .../src/CsvHelper/Configuration/ClassMapBuilder.cs | 432 +++++++++++++++++++++ 1 file changed, 432 insertions(+) create mode 100644 ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs (limited to 'ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs') diff --git a/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs new file mode 100644 index 0000000..fbe2e6a --- /dev/null +++ b/ThirdParty/CsvHelper-master/src/CsvHelper/Configuration/ClassMapBuilder.cs @@ -0,0 +1,432 @@ +// 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.Linq.Expressions; +using CsvHelper.TypeConversion; +using System.Collections; + +namespace CsvHelper.Configuration +{ + /// + /// Has mapping capabilities. + /// + /// The class type. + public interface IHasMap : IBuildableClass + { + /// + /// Maps a member to a CSV field. + /// + /// The member to map. + /// If true, an existing map will be used if available. + /// If false, a new map is created for the same member. + /// The member mapping. + IHasMapOptions Map(Expression> expression, bool useExistingMap = true); + } + + /// + /// Options after a mapping call. + /// + /// The class type. + /// The member type. + public interface IHasMapOptions : + IHasMap, + IHasTypeConverter, + IHasIndex, + IHasName, + IHasOptional, + IHasConvertUsing, + IHasDefault, + IHasConstant, + IHasValidate + { } + + /// + /// Has type converter capabilities. + /// + /// The class type. + /// The member type. + public interface IHasTypeConverter : IBuildableClass + { + /// + /// Specifies the to use + /// when converting the member to and from a CSV field. + /// + /// The TypeConverter to use. + IHasTypeConverterOptions TypeConverter(ITypeConverter typeConverter); + + /// + /// Specifies the to use + /// when converting the member to and from a CSV field. + /// + /// The of the + /// to use. + IHasTypeConverterOptions TypeConverter() where TConverter : ITypeConverter; + } + + /// + /// Options after a type converter call. + /// + /// The class type. + /// The member type. + public interface IHasTypeConverterOptions : + IHasMap, + IHasDefault, + IHasValidate + { } + + /// + /// Has index capabilities. + /// + /// The class type. + /// The member type. + public interface IHasIndex : IBuildableClass + { + /// + /// When reading, is used to get the field at + /// the given index. When writing, the fields + /// will be written in the order of the field + /// indexes. + /// + /// The index of the CSV field. + /// The end index used when mapping to an member. + IHasIndexOptions Index(int index, int indexEnd = -1); + } + + /// + /// Options after an index call. + /// + /// The class type. + /// The member type. + public interface IHasIndexOptions : + IHasMap, + IHasTypeConverter, + IHasName, + IHasDefault, + IHasValidate + { } + + /// + /// Has optional capabilities. + /// + /// The class type. + /// The member type. + public interface IHasOptional : IBuildableClass + { + /// + /// Ignore the member when reading if no matching field name can be found. + /// + IHasOptionalOptions Optional(); + } + + /// + /// Options after an optional call. + /// + /// The class type. + /// The member type. + public interface IHasOptionalOptions : + IHasMap, + IHasTypeConverter, + IHasName, + IHasDefault, + IHasValidate + { } + + /// + /// Has name capabilities. + /// + /// The class type. + /// The member type. + public interface IHasName : IBuildableClass + { + /// + /// When reading, is used to get the field + /// at the index of the name if there was a + /// header specified. It will look for the + /// first name match in the order listed. + /// When writing, sets the name of the + /// field in the header record. + /// The first name will be used. + /// + /// The possible names of the CSV field. + IHasNameOptions Name(params string[] names); + } + + /// + /// Options after a name call. + /// + /// The class type. + /// The member type. + public interface IHasNameOptions : + IHasMap, + IHasTypeConverter, + IHasNameIndex, + IHasDefault, + IHasValidate + { } + + /// + /// Has name index capabilities. + /// + /// The class type. + /// The member type. + public interface IHasNameIndex : IBuildableClass + { + /// + /// When reading, is used to get the + /// index of the name used when there + /// are multiple names that are the same. + /// + /// The index of the name. + IHasNameIndexOptions NameIndex(int index); + } + + /// + /// Options after a name index call. + /// + /// The class type. + /// The member type. + public interface IHasNameIndexOptions : + IHasMap, + IHasTypeConverter, + IHasDefault, + IHasValidate + { } + + /// + /// Has convert using capabilities. + /// + /// The class type. + /// The member type. + public interface IHasConvertUsing : IBuildableClass + { + /// + /// Specifies an expression to be used to convert data in the + /// row to the member. + /// + /// The convert expression. + IHasMap ConvertUsing(ConvertFromString convertExpression); + + /// + /// Specifies an expression to be used to convert the object + /// to a field. + /// + /// The convert expression. + IHasMap ConvertUsing(ConvertToString convertExpression); + } + + /// + /// Has default capabilities. + /// + /// The class type. + /// The member type. + public interface IHasDefault : IBuildableClass + { + /// + /// The default value that will be used when reading when + /// the CSV field is empty. + /// + /// The default value. + IHasDefaultOptions Default(TMember defaultValue); + + /// + /// The default value that will be used when reading when + /// the CSV field is empty. This value is not type checked + /// and will use a to convert + /// the field. This could potentially have runtime errors. + /// + /// The default value. + IHasDefaultOptions Default(string defaultValue); + } + + /// + /// Options after a default call. + /// + /// The class type. + /// The member type. + public interface IHasDefaultOptions : + IHasMap, + IHasValidate + { } + + /// + /// Has constant capabilities. + /// + /// The class type. + /// The member type. + public interface IHasConstant : IBuildableClass + { + /// + /// The constant value that will be used for every record when + /// reading and writing. This value will always be used no matter + /// what other mapping configurations are specified. + /// + /// The constant value. + IHasMap Constant(TMember value); + } + + /// + /// Has validate capabilities. + /// + /// The class type. + /// The member type. + public interface IHasValidate : IBuildableClass + { + /// + /// The validate expression that will be called on every field when reading. + /// The expression should return true if the field is valid. + /// If false is returned, a + /// will be thrown. + /// + /// The validation expression. + IHasMap Validate(Validate validateExpression); + } + + /// + /// Has build capabilities. + /// + /// The class type. + public interface IBuildableClass + { + /// + /// Builds the . + /// + ClassMap Build(); + } + + internal class ClassMapBuilder : IHasMap + { + private readonly ClassMap map; + + public ClassMapBuilder() + { + map = new BuilderClassMap(); + } + + public IHasMapOptions Map(Expression> expression, bool useExistingMap = true) + { + return new MemberMapBuilder(map, map.Map(expression, useExistingMap)); + } + + public ClassMap Build() + { + return map; + } + + private class BuilderClassMap : ClassMap { } + } + + internal class MemberMapBuilder : + IHasMap, + IHasMapOptions, + IHasTypeConverter, + IHasTypeConverterOptions, + IHasIndex, + IHasIndexOptions, + IHasName, + IHasNameOptions, + IHasNameIndex, + IHasNameIndexOptions, + IHasOptional, + IHasOptionalOptions, + IHasConvertUsing, + IHasDefault, + IHasDefaultOptions, + IHasConstant, + IHasValidate + { + private readonly ClassMap classMap; + private readonly MemberMap memberMap; + + public MemberMapBuilder(ClassMap classMap, MemberMap memberMap) + { + this.classMap = classMap; + this.memberMap = memberMap; + } + +#pragma warning disable CS0693 // Type parameter has the same name as the type parameter from outer type + public IHasMapOptions Map(Expression> expression, bool useExistingMap = true) + { + return new MemberMapBuilder(classMap, classMap.Map(expression, useExistingMap)); + } +#pragma warning restore CS0693 // Type parameter has the same name as the type parameter from outer type + + public IHasMap ConvertUsing(ConvertFromString convertExpression) + { + memberMap.Convert(convertExpression); + return this; + } + + public IHasMap ConvertUsing(ConvertToString convertExpression) + { + memberMap.Convert(convertExpression); + return this; + } + + public IHasDefaultOptions Default(TMember defaultValue) + { + memberMap.Default(defaultValue); + return this; + } + + public IHasDefaultOptions Default(string defaultValue) + { + memberMap.Default(defaultValue); + return this; + } + + public IHasIndexOptions Index(int index, int indexEnd = -1) + { + memberMap.Index(index, indexEnd); + return this; + } + + public IHasNameOptions Name(params string[] names) + { + memberMap.Name(names); + return this; + } + + public IHasNameIndexOptions NameIndex(int index) + { + memberMap.NameIndex(index); + return this; + } + + public IHasOptionalOptions Optional() + { + memberMap.Optional(); + return this; + } + + public IHasTypeConverterOptions TypeConverter(ITypeConverter typeConverter) + { + memberMap.TypeConverter(typeConverter); + return this; + } + + public IHasTypeConverterOptions TypeConverter() where TConverter : ITypeConverter + { + memberMap.TypeConverter(); + return this; + } + + public IHasMap Constant(TMember value) + { + memberMap.Constant(value); + return this; + } + + public IHasMap Validate(Validate validateExpression) + { + memberMap.Validate(validateExpression); + return this; + } + + public ClassMap Build() + { + return classMap; + } + } +} -- cgit v1.1-26-g67d0