44 lines
800 B
Go
44 lines
800 B
Go
package sqlgen
|
|
|
|
import (
|
|
"bytes"
|
|
_ "embed"
|
|
"fmt"
|
|
"go/format"
|
|
"os"
|
|
"path/filepath"
|
|
"text/template"
|
|
)
|
|
|
|
//go:embed gen.go.tmpl
|
|
var fileTemplate string
|
|
|
|
func render(driver, schemaPath, outputPath string) (err error) {
|
|
outputPath, err = filepath.Abs(outputPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sch, err := parsePath(driver, schemaPath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
tmpl := template.Must(template.New("").Parse(fileTemplate))
|
|
|
|
buf := &bytes.Buffer{}
|
|
err = tmpl.Execute(buf, struct {
|
|
PackageName string
|
|
Schema *schema
|
|
}{filepath.Base(filepath.Dir(outputPath)), sch})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
formatted, err := format.Source(buf.Bytes())
|
|
if err != nil {
|
|
return fmt.Errorf("formatting generated code: %w", err)
|
|
}
|
|
|
|
return os.WriteFile(outputPath, formatted, 0o644)
|
|
}
|