forked from andyleap/gencode
/
init.go
42 lines (35 loc) · 905 Bytes
/
init.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
package golang
import (
"flag"
"go/format"
"github.com/andyleap/gencode/schema"
)
type GolangBackend struct {
Package string
Unsafe bool
}
func (gb *GolangBackend) Generate(s *schema.Schema) (string, error) {
w := &Walker{}
w.Unsafe = gb.Unsafe
def, err := w.WalkSchema(s, gb.Package)
if err != nil {
return "", err
}
out, err := format.Source([]byte(def.String()))
if err != nil {
return def.String(), nil
}
return string(out), nil
}
func (gb *GolangBackend) Flags() *flag.FlagSet {
flags := flag.NewFlagSet("Go", flag.ExitOnError)
flags.StringVar(&gb.Package, "package", "main", "package to build the gencode system for")
flags.BoolVar(&gb.Unsafe, "unsafe", false, "Generate faster, but unsafe code")
return flags
}
func (gb *GolangBackend) GeneratedFilename(filename string) string {
return filename + ".gen.go"
}
func init() {
schema.Register("go", &GolangBackend{})
}