binfo/summary.go

84 lines
1.3 KiB
Go
Raw Normal View History

2024-12-15 09:58:44 +00:00
package binfo
import (
2024-12-15 15:14:21 +00:00
_ "embed"
2024-12-15 09:58:44 +00:00
"fmt"
"strings"
2024-12-15 15:10:14 +00:00
"text/template"
2024-12-15 09:58:44 +00:00
)
type SummaryMode uint
const (
ModeModule SummaryMode = 1 << iota
ModeBuild
ModeCGO
ModeVCS
ModeMultiline
)
2024-12-15 15:10:14 +00:00
type params struct {
2024-12-15 15:17:48 +00:00
Name string
Version string
2024-12-15 15:10:14 +00:00
Module bool
Build bool
CGO bool
VCS bool
2024-12-15 15:17:48 +00:00
Brk string
Sep string
I Binfo
2024-12-15 15:10:14 +00:00
}
//go:embed summary.tmpl
var st string
func (b Binfo) Summarize(name string, version string, mode SummaryMode) (string, error) {
2024-12-15 09:58:44 +00:00
wants := func(test SummaryMode) bool {
return mode&test == test
}
var (
brk string
sep string
)
if wants(ModeMultiline) {
brk = "\n"
sep = "\n"
} else {
brk = " "
sep = ", "
}
2024-12-15 15:10:14 +00:00
t, err := template.New("").Parse(st)
if err != nil {
return "", fmt.Errorf("cannot parse summary template: %w", err)
2024-12-15 09:58:44 +00:00
}
2024-12-15 15:10:14 +00:00
sb := new(strings.Builder)
err = t.Execute(sb, params{
Module: wants(ModeModule),
Build: wants(ModeBuild),
CGO: wants(ModeCGO),
VCS: wants(ModeVCS),
Brk: brk,
Sep: sep,
I: b,
})
if err != nil {
return "", fmt.Errorf("cannot execute summary template: %w", err)
2024-12-15 09:58:44 +00:00
}
2024-12-15 15:10:14 +00:00
return sb.String(), nil
}
2024-12-15 09:58:44 +00:00
2024-12-15 15:10:14 +00:00
func (b Binfo) MustSummarize(name string, version string, mode SummaryMode) string {
s, err := b.Summarize(name, version, mode)
if err != nil {
panic(err)
2024-12-15 09:58:44 +00:00
}
2024-12-15 15:10:14 +00:00
return s
2024-12-15 09:58:44 +00:00
}