/
gen.go
69 lines (58 loc) · 1.35 KB
/
gen.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package fsharp
import (
"bufio"
"bytes"
"context"
"io"
"strings"
plugin "github.com/tabbed/sqlc-go/codegen"
"github.com/kaashyapan/sqlc-gen-crud/internal/core"
"github.com/kaashyapan/sqlc-gen-crud/internal/templates"
)
func Generate(ctx context.Context, req *plugin.Request) (*plugin.Response, error) {
conf, err := core.MakeConfig(req)
if err != nil {
return nil, err
}
enums := core.BuildEnums(req)
structs := core.BuildDataClasses(conf, req)
if err != nil {
return nil, err
}
tctx := core.TmplCtx{
Settings: req.Settings,
Q: `"""`,
Package: conf.Package,
Enums: enums,
DataClasses: structs,
SqlcVersion: req.SqlcVersion,
Configuration: conf,
}
output := map[string]string{}
execute := func(name string, f func(io.Writer, core.TmplCtx) error) error {
var b bytes.Buffer
w := bufio.NewWriter(&b)
tctx.SourceName = name
err := f(w, tctx)
w.Flush()
if err != nil {
return err
}
if !strings.HasSuffix(name, ".sql") {
name += ".sql"
}
output[name] = core.Format(b.String())
return nil
}
if err := execute("query.sql", templates.Sqls); err != nil {
return nil, err
}
resp := plugin.CodeGenResponse{}
for filename, code := range output {
resp.Files = append(resp.Files, &plugin.File{
Name: filename,
Contents: []byte(code),
})
}
return &resp, nil
}