public Result <object, IValidationError> Map(string value, Type propertyType, int rowIndex, ColumnMapping columnMapping) { if (string.IsNullOrEmpty(value)) { return(HandleEmptyValue(columnMapping.ColumnIndex, rowIndex, columnMapping)); } if (columnMapping.CustomValueParser.IsNotNull()) { try { var parsedValue = columnMapping.CustomValueParser(value); return(Result.Ok <object, IValidationError>(parsedValue)); } catch (Exception) { var parsingValidationError = ParsingValidationError.CouldNotParseValue( columnMapping.ColumnIndex, rowIndex, columnMapping.DisplayName, columnMapping.PropertyName); return(Result.Fail <object, IValidationError>(parsingValidationError)); } } return(_valueParser .Parse(propertyType, value, columnMapping.Format) .OnValidationSuccess(parsedValue => parsedValue) .OnValidationFailure(error => ParsingValidationError.CouldNotParseValue( columnMapping.ColumnIndex, rowIndex, columnMapping.DisplayName, columnMapping.PropertyName))); }
private static Maybe <IValidationError> HandleEmptyCell(ColumnMapping columnMapping, int rowIndex, string propertyName) { if (!columnMapping.IsRequired) { return(Maybe <IValidationError> .None); } var parsingValidationError = ParsingValidationError.CellNotFound( columnMapping.ColumnIndex, rowIndex, columnMapping.DisplayName, propertyName); return(Maybe <IValidationError> .From(parsingValidationError)); }
private List <IValidationError> HandleHeaderRow(Row firstRow, MappingConfig mappingConfig) { var validationErrors = new List <IValidationError>(); foreach (var columnMapping in mappingConfig.ColumnMappings.OfType <IUseHeaderRow>()) { var headerCell = firstRow.Cells.FirstOrDefault(c => c.Value.ToString().Equals(columnMapping.ColumnName.ToString(), StringComparison.OrdinalIgnoreCase)); if (headerCell != null) { columnMapping.SetColumnIndex(headerCell.ColumnIndex); } else if (columnMapping.IsRequiredInHeaderRow) { validationErrors.Add(ParsingValidationError.CouldNotFindHeader(-1, 0, columnMapping.ColumnName, columnMapping.ColumnName)); } } return(validationErrors); }