38 lines
746 B
Go
38 lines
746 B
Go
// 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)
|
|
}
|