@@ -4,48 +4,50 @@ import (
44 "reflect"
55
66 "github.com/domonda/go-retable"
7+ "github.com/ungerik/go-fs"
78)
89
9- func AsStructSlice [T any ](rows [][]string , naming * retable.StructFieldNaming , requiredCols [] string , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error ) ([]T , error ) {
10+ func ReadStringsToStructSlice [T any ](rows [][]string , naming * retable.StructFieldNaming , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error , requiredCols ... string ) ([]T , error ) {
1011 rows = RemoveEmptyRows (rows )
1112 return retable .ViewToStructSlice [T ](
1213 retable .NewStringsView ("" , rows ),
1314 naming ,
14- requiredCols ,
1515 dstScanner ,
1616 srcFormatter ,
1717 validate ,
18+ requiredCols ... ,
1819 )
1920}
2021
21- func ReadWithFormatAsStructSlice [T any ](csv []byte , format * Format , naming * retable.StructFieldNaming , requiredCols [] string , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error ) ([]T , error ) {
22- rows , err := ParseWithFormat (csv , format )
22+ func ReadBytesWithFormatToStructSlice [T any ](csvData []byte , format * Format , naming * retable.StructFieldNaming , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error , requiredCols ... string ) ([]T , error ) {
23+ rows , err := ParseWithFormat (csvData , format )
2324 if err != nil {
2425 return nil , err
2526 }
26- rows = RemoveEmptyRows (rows )
27- return retable .ViewToStructSlice [T ](
28- retable .NewStringsView ("" , rows ),
29- naming ,
30- requiredCols ,
31- dstScanner ,
32- srcFormatter ,
33- validate ,
34- )
27+ return ReadStringsToStructSlice [T ](rows , naming , dstScanner , srcFormatter , validate , requiredCols ... )
3528}
3629
37- func ReadDetectFormatAsStructSlice [T any ](csv [] byte , configOrNil * FormatDetectionConfig , naming * retable.StructFieldNaming , requiredCols [] string , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error ) ([]T , error ) {
38- rows , _ , err := ParseDetectFormat ( csv , configOrNil )
30+ func ReadFileWithFormatToStructSlice [T any ](csvFile fs. FileReader , format * Format , naming * retable.StructFieldNaming , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error , requiredCols ... string ) ([]T , error ) {
31+ data , err := csvFile . ReadAll ( )
3932 if err != nil {
4033 return nil , err
4134 }
42- rows = RemoveEmptyRows (rows )
43- return retable .ViewToStructSlice [T ](
44- retable .NewStringsView ("" , rows ),
45- naming ,
46- requiredCols ,
47- dstScanner ,
48- srcFormatter ,
49- validate ,
50- )
35+ return ReadBytesWithFormatToStructSlice [T ](data , format , naming , dstScanner , srcFormatter , validate , requiredCols ... )
36+ }
37+
38+ func ReadBytesDetectFormatToStructSlice [T any ](csvData []byte , detectConfig * FormatDetectionConfig , naming * retable.StructFieldNaming , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error , requiredCols ... string ) ([]T , * Format , error ) {
39+ rows , format , err := ParseDetectFormat (csvData , detectConfig )
40+ if err != nil {
41+ return nil , format , err
42+ }
43+ slice , err := ReadStringsToStructSlice [T ](rows , naming , dstScanner , srcFormatter , validate , requiredCols ... )
44+ return slice , format , err
45+ }
46+
47+ func ReadFileDetectFormatToStructSlice [T any ](csvFile fs.FileReader , detectConfig * FormatDetectionConfig , naming * retable.StructFieldNaming , dstScanner retable.Scanner , srcFormatter retable.Formatter , validate func (reflect.Value ) error , requiredCols ... string ) ([]T , * Format , error ) {
48+ data , err := csvFile .ReadAll ()
49+ if err != nil {
50+ return nil , nil , err
51+ }
52+ return ReadBytesDetectFormatToStructSlice [T ](data , detectConfig , naming , dstScanner , srcFormatter , validate , requiredCols ... )
5153}
0 commit comments