@@ -54,28 +54,29 @@ extension CSVReader {
5454 /// - throws: `CSVError<CSVReader>` exclusively.
5555 init ( configuration: Configuration , decoder: ScalarDecoder , buffer: ScalarBuffer ) throws {
5656 // 1. Figure out the field and row delimiters.
57- switch ( configuration. delimiters. field. rawValue, configuration. delimiters. row. rawValue) {
58- case ( nil , nil ) :
57+ let ( field, row) = ( configuration. delimiters. field. rawValue, configuration. delimiters. row. rawValue)
58+ switch ( field. isEmpty, row. isEmpty) {
59+ case ( true , true ) :
5960 self . delimiters = try CSVReader . inferDelimiters ( decoder: decoder, buffer: buffer)
60- case ( nil , let row ) :
61+ case ( true , false ) :
6162 self . delimiters = try CSVReader . inferFieldDelimiter ( rowDelimiter: row, decoder: decoder, buffer: buffer)
62- case ( let field , nil ) :
63+ case ( false , true ) :
6364 self . delimiters = try CSVReader . inferRowDelimiter ( fieldDelimiter: field, decoder: decoder, buffer: buffer)
64- case ( let field, let row) where !field. elementsEqual ( row) :
65+ case ( false , false ) where field. elementsEqual ( row) :
66+ throw Error . invalidDelimiters ( field)
67+ default :
6568 self . delimiters = ( . init( field) , . init( row) )
66- case ( let delimiter, _) :
67- throw Error . invalidDelimiters ( delimiter)
6869 }
6970 // 2. Set the escaping scalar.
7071 self . escapingScalar = configuration. escapingStrategy. scalar
7172 // 3. Set the trim characters set.
7273 self . trimCharacters = configuration. trimStrategry
7374 // 4. Ensure trim character set doesn't contain the field delimiter.
74- guard delimiters. field. allSatisfy ( { !self . trimCharacters. contains ( $0) } ) else {
75+ guard self . delimiters. field. allSatisfy ( { !self . trimCharacters. contains ( $0) } ) else {
7576 throw Error . invalidTrimCharacters ( self . trimCharacters, delimiter: configuration. delimiters. field. rawValue)
7677 }
7778 // 5. Ensure trim character set doesn't contain the row delimiter.
78- guard delimiters. row. allSatisfy ( { !self . trimCharacters. contains ( $0) } ) else {
79+ guard self . delimiters. row. allSatisfy ( { !self . trimCharacters. contains ( $0) } ) else {
7980 throw Error . invalidTrimCharacters ( self . trimCharacters, delimiter: configuration. delimiters. row. rawValue)
8081 }
8182 // 6. Ensure trim character set does not include escaping scalar
0 commit comments