// Copyright (c) 2015, Daniel Martí // See LICENSE for licensing information package main import ( "fmt" "os" "sort" ) var cmdList = &Command{ UsageLine: "list (categories)", Short: "List all known values of a kind", } func init() { cmdList.Run = runList } func runList(args []string) error { if len(args) != 1 { return fmt.Errorf("need exactly one argument") } apps, err := loadIndexes() if err != nil { return err } values := make(map[string]struct{}) switch args[0] { case "categories": for _, app := range apps { for _, c := range app.Categories { values[c] = struct{}{} } } default: return fmt.Errorf("invalid argument") } result := make([]string, 0, len(values)) for s := range values { result = append(result, s) } sort.Strings(result) for _, s := range result { fmt.Fprintln(os.Stdout, s) } return nil }