private static IValueSource valueSourceFor(IEnumerable <string> values, CsvData headers, IColumnMapping mapping) { var data = new CsvData(values); return(headers == null ? mapping.ValueSource(data) : mapping.ValueSource(data, headers)); }
private void processData <T>(TextReader reader, CsvData headers, CsvRequest <T> request) { var mapping = request.Mapping.As <IColumnMapping>(); readUntilComplete(reader, tokens => { var source = valueSourceFor(tokens, headers, mapping); var result = _resolver.BindModel(typeof(T), source); request.Callback(result.Value.As <T>()); return(true); }); }
private CsvData determineHeaders <T>(TextReader reader, CsvRequest <T> request) { CsvData headers = null; if (request.HeadersExist) { readUntilComplete(reader, tokens => { if (tokens.Any() && request.UseHeaderOrdering) { headers = new CsvData(tokens); } return(false); }); } return(headers); }
IValueSource IColumnMapping.ValueSource(CsvData data, CsvData headers) { var mapping = this.As <IColumnMapping>(); var badColumns = new List <string>(); var columns = headers .Values .Select(x => { var column = mapping.ColumnFor(x); if (column == null) { badColumns.Add(x); } return(column); }).ToArray(); if (badColumns.Any()) { throw new CsvColumnException(badColumns); } return(data.ToValueSource(columns)); }
IValueSource IColumnMapping.ValueSource(CsvData data) { return(data.ToValueSource(_columns)); }