45 lines
789 B
Go
45 lines
789 B
Go
package render
|
|
|
|
import (
|
|
"encoding/csv"
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/thomiceli/opengist/internal/git"
|
|
)
|
|
|
|
type CSVFile struct {
|
|
*git.File
|
|
Type string `json:"type"`
|
|
Header []string `json:"-"`
|
|
Rows [][]string `json:"-"`
|
|
}
|
|
|
|
func (r CSVFile) InternalType() string {
|
|
return "CSVFile"
|
|
}
|
|
|
|
func renderCsvFile(file *git.File) (*CSVFile, error) {
|
|
reader := csv.NewReader(strings.NewReader(file.Content))
|
|
records, err := reader.ReadAll()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
header := records[0]
|
|
numColumns := len(header)
|
|
|
|
for i := 1; i < len(records); i++ {
|
|
if len(records[i]) != numColumns {
|
|
return nil, fmt.Errorf("CSV file has invalid row at index %d", i)
|
|
}
|
|
}
|
|
|
|
return &CSVFile{
|
|
File: file,
|
|
Type: "CSV",
|
|
Header: header,
|
|
Rows: records[1:],
|
|
}, nil
|
|
}
|