52 lines
1.1 KiB
Go
52 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// toolIndex generates a tool index from a store's file listing.
|
|
func toolIndex(s Store) ([]byte, error) {
|
|
entries, err := s.List()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var sb strings.Builder
|
|
for _, e := range entries {
|
|
if e.IsDir() || e.Name() == "idx" {
|
|
continue
|
|
}
|
|
entry, err := s.Open(e.Name())
|
|
if err != nil {
|
|
continue
|
|
}
|
|
data, err := entry.Read()
|
|
if err != nil {
|
|
continue
|
|
}
|
|
var desc, args string
|
|
for line := range strings.SplitSeq(string(data), "\n") {
|
|
if d, ok := strings.CutPrefix(line, "# description:"); ok {
|
|
desc = strings.TrimSpace(d)
|
|
} else if a, ok := strings.CutPrefix(line, "# Args:"); ok {
|
|
args = strings.TrimSpace(a)
|
|
} else if a, ok := strings.CutPrefix(line, "# args:"); ok {
|
|
args = strings.TrimSpace(a)
|
|
}
|
|
if !strings.HasPrefix(line, "#") && line != "" {
|
|
break
|
|
}
|
|
}
|
|
if desc == "" {
|
|
continue
|
|
}
|
|
fmt.Fprintf(&sb, "## %s\n", e.Name())
|
|
fmt.Fprintf(&sb, "description: %s\n", desc)
|
|
if args != "" {
|
|
fmt.Fprintf(&sb, "args: %s\n", args)
|
|
}
|
|
sb.WriteString("\n")
|
|
}
|
|
return []byte(sb.String()), nil
|
|
}
|