Files
heliosian/internal/data/data.go
T

38 lines
746 B
Go
Raw Normal View History

// Package data provides tabular app data sources.
package data
import (
"encoding/csv"
"os"
"path/filepath"
)
type Source interface {
Table(app, name string) ([]string, []map[string]string, error)
}
type Dir struct {
Root string
}
func (d Dir) Table(app, name string) ([]string, []map[string]string, error) {
f, err := os.Open(filepath.Join(d.Root, app, name+".csv"))
if err != nil {
return nil, nil, err
}
defer f.Close()
rows, err := csv.NewReader(f).ReadAll()
if err != nil {
return nil, nil, err
}
values := make([][]interface{}, len(rows))
for i, row := range rows {
cells := make([]interface{}, len(row))
for j, cell := range row {
cells[j] = cell
}
values[i] = cells
}
return parseTable(name, values)
}