package emit
import (
)
func ( string, []*discover.Package, []*solve.Plan, []string, map[string]string) string {
var strings.Builder
var []string
for , := range {
= append(, .PkgPath)
}
slices.Sort()
fmt.Fprintf(&, "plumb: scanned %d package(s): %s\n", len(), strings.Join(, ", "))
fmt.Fprintf(&, "plumb: generating into package %q\n", )
:= func( types.Type) string {
return types.TypeString(, func( *types.Package) string {
if == nil || .Path() == {
return ""
}
if , := [.Path()]; {
return
}
return .Name()
})
}
for , := range {
fmt.Fprintf(&, "\nset %q (%s, %s):\n", .Name, plural(.ProviderCount, "provider"), plural(len(.Order), "instantiation"))
for , := range .Order {
fmt.Fprintf(&, " %s %s in(%s) → out(%s)\n",
kindLabel(.Prov), .Prov.Name, joinTypes(.InputTypes(), ), joinResults(, ))
}
fmt.Fprintf(&, " inject %s%s in(%s) → out(%s)\n", .Name, renderLiftedHeader(.Lifted, ),
joinTypes(.InputTypes(), ), injectorOut(, ))
}
if len() > 0 {
.WriteString(" imports:\n")
for , := range {
fmt.Fprintf(&, " %s\n", )
}
}
return .String()
}
func ( int, string) string {
if == 1 {
return fmt.Sprintf("%d %s", , )
}
return fmt.Sprintf("%d %ss", , )
}
func ( *discover.Provider) string {
if .Kind == discover.KindSymbol {
if , := .Sym.(*types.Const); {
return "const"
}
return "var"
}
return .Kind.String()
}
func ( []types.Type, func(types.Type) string) string {
var []string
for , := range {
= append(, ())
}
return strings.Join(, ", ")
}
func ( *solve.Instance, func(types.Type) string) string {
var []string
for , := range .Results {
switch .Kind {
case solve.ResultKindValue:
= append(, "val "+(.Typ))
case solve.ResultKindCleanup:
if .Failable {
= append(, "cleanup func() error")
} else {
= append(, "cleanup func()")
}
case solve.ResultKindError:
= append(, "err error")
default:
panic(fmt.Sprintf("plumb: unhandled result kind %d", .Kind))
}
}
return strings.Join(, ", ")
}
func ( *solve.Plan, func(types.Type) string) string {
var []string
for , := range .Outputs {
= append(, "val "+())
}
if .AnyCleanup {
if .CleanupFailable {
= append(, "cleanup func() error")
} else {
= append(, "cleanup func()")
}
}
if .Fallible {
= append(, "err error")
}
return strings.Join(, ", ")
}