binfo/summary.go

74 lines
916 B
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
"strings"
2024-12-15 15:10:14 +00:00
"text/template"
2024-12-15 09:58:44 +00:00
)
type SummaryMode uint
const (
2024-12-15 15:48:38 +00:00
Module SummaryMode = 1 << iota
Build
CGO
VCS
Multiline
2024-12-15 09:58:44 +00:00
)
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
}
2024-12-17 08:20:21 +00:00
var (
//go:embed summary.tmpl
st string
t, _ = template.New("").Parse(st)
)
2024-12-15 15:10:14 +00:00
2024-12-15 15:48:38 +00:00
func (b Binfo) Summarize(name string, version string, mode SummaryMode) string {
2024-12-15 09:58:44 +00:00
wants := func(test SummaryMode) bool {
return mode&test == test
}
var (
brk string
sep string
)
2024-12-15 15:48:38 +00:00
if wants(Multiline) {
2024-12-15 09:58:44 +00:00
brk = "\n"
sep = "\n"
} else {
brk = " "
sep = ", "
}
2024-12-15 15:10:14 +00:00
sb := new(strings.Builder)
2024-12-17 08:20:21 +00:00
err := t.Execute(sb, params{
2024-12-15 15:48:38 +00:00
Module: wants(Module),
Build: wants(Build),
CGO: wants(CGO),
VCS: wants(VCS),
2024-12-15 15:10:14 +00:00
Brk: brk,
Sep: sep,
I: b,
})
if err != nil {
2024-12-15 15:48:38 +00:00
return ""
2024-12-15 09:58:44 +00:00
}
2024-12-15 15:48:38 +00:00
return sb.String()
2024-12-15 09:58:44 +00:00
}