79 lines
1.2 KiB
Go
79 lines
1.2 KiB
Go
package binfo
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"strings"
|
|
"text/template"
|
|
)
|
|
|
|
type SummaryMode uint
|
|
|
|
const (
|
|
ModeModule SummaryMode = 1 << iota
|
|
ModeBuild
|
|
ModeCGO
|
|
ModeVCS
|
|
ModeMultiline
|
|
)
|
|
|
|
type params struct {
|
|
Module bool
|
|
Build bool
|
|
CGO bool
|
|
VCS bool
|
|
Brk string
|
|
Sep string
|
|
I Binfo
|
|
}
|
|
|
|
//go:embed summary.tmpl
|
|
var st string
|
|
|
|
func (b Binfo) Summarize(name string, version string, mode SummaryMode) (string, error) {
|
|
wants := func(test SummaryMode) bool {
|
|
return mode&test == test
|
|
}
|
|
|
|
var (
|
|
brk string
|
|
sep string
|
|
)
|
|
|
|
if wants(ModeMultiline) {
|
|
brk = "\n"
|
|
sep = "\n"
|
|
} else {
|
|
brk = " "
|
|
sep = ", "
|
|
}
|
|
|
|
t, err := template.New("").Parse(st)
|
|
if err != nil {
|
|
return "", fmt.Errorf("cannot parse summary template: %w", err)
|
|
}
|
|
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)
|
|
}
|
|
|
|
return sb.String(), nil
|
|
}
|
|
|
|
func (b Binfo) MustSummarize(name string, version string, mode SummaryMode) string {
|
|
s, err := b.Summarize(name, version, mode)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return s
|
|
}
|