-
Notifications
You must be signed in to change notification settings - Fork 222
/
Copy pathplugins.go
52 lines (41 loc) · 1.26 KB
/
plugins.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package golang
import (
"fmt"
"strings"
"github.com/spacecloud-io/space-cloud/pkg/apis/core/v1alpha1"
"golang.org/x/tools/imports"
)
func (goDriver *Golang) GeneratePlugins(plugins []v1alpha1.HTTPPlugin) (string, string, error) {
fileName := "plugins.gen.go"
var b strings.Builder
// package name and imports
pkgOut := fmt.Sprintf("package %s\n\n", goDriver.pkgName)
_, _ = b.WriteString(pkgOut)
s := `
type Plugins struct {}
type PluginDetails struct {
name string
driver string
}
func (plugin PluginDetails) Name() string {
return plugin.name
}
func (plugin PluginDetails) Driver() string {
return plugin.driver
}
`
for _, plugin := range plugins {
driverName := getTypeName(plugin.Driver, false) + getTypeName(plugin.Name, false)
s += fmt.Sprintf("func (plugin Plugins) %s() PluginDetails {\n", driverName)
s += fmt.Sprintf("%s := PluginDetails{\n", driverName)
s += fmt.Sprintf("name: %q,\n", plugin.Name)
s += fmt.Sprintf("driver: %q,\n}\n", plugin.Driver)
s += fmt.Sprintf("return %s\n}\n\n", driverName)
}
_, _ = b.WriteString(s)
outBytes, err := imports.Process(goDriver.pkgName+".go", []byte(b.String()), nil)
if err != nil {
return "", "", fmt.Errorf("error formatting Go code: %w", err)
}
return string(outBytes), fileName, nil
}