Neale Pickett
·
2020-09-16
inventory.go
1package transpile
2
3import (
4 "log"
5 "sort"
6 "strings"
7
8 "github.com/spf13/afero"
9)
10
11// Inventory maps category names to lists of point values.
12type Inventory map[string][]int
13
14// FsInventory returns a mapping of category names to puzzle point values.
15func FsInventory(fs afero.Fs) (Inventory, error) {
16 dirEnts, err := afero.ReadDir(fs, "")
17 if err != nil {
18 log.Print(err)
19 return nil, err
20 }
21
22 inv := make(Inventory)
23 for _, ent := range dirEnts {
24 if strings.HasPrefix(ent.Name(), ".") {
25 continue
26 }
27 if ent.IsDir() {
28 name := ent.Name()
29 c := NewFsCategory(fs, name)
30 puzzles, err := c.Inventory()
31 if err != nil {
32 log.Printf("Inventory: %s: %s", name, err)
33 continue
34 }
35 sort.Ints(puzzles)
36 inv[name] = puzzles
37 }
38 }
39
40 return inv, nil
41}