-
Notifications
You must be signed in to change notification settings - Fork 4
/
main.go
83 lines (70 loc) · 2.15 KB
/
main.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main
import (
"flag"
"github.com/tableauio/tableau/proto/tableaupb"
"google.golang.org/protobuf/compiler/protogen"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/descriptorpb"
"google.golang.org/protobuf/types/pluginpb"
)
const version = "0.4.8"
const pcExt = "pc" // protoconf file extension
const pbExt = "pb" // protobuf file extension
// specify protobuf namespace
var namespace *string
// specify messager suffix
var messagerSuffix *string
// mode control generating rules for better dependency management.
var mode *string
// count of generated registry files, aimed to boost compiling speed.
var registryShards *int
const (
ModeDefault = "default" // generate all at once.
ModeRegistry = "registry" // only generate "registry.pc.h/cc" files.
ModeMessager = "messager" // only generate "*.pc.h/cc" for each .proto files.
)
func main() {
var flags flag.FlagSet
namespace = flags.String("namespace", "tableau", "tableau namespace")
messagerSuffix = flags.String("suffix", "Mgr", "tableau messager name suffix")
mode = flags.String("mode", "default", `available mode: default, registry, and messager.
- default: generate all at once.
- registry: only generate "registry.pc.h/cc" files.
- messager: only generate "*.pc.h/cc" for each .proto files.
`)
registryShards = flags.Int("registry-shards", 1, "count of generated registry files")
flag.Parse()
protogen.Options{
ParamFunc: flags.Set,
}.Run(func(gen *protogen.Plugin) error {
gen.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL)
for _, f := range gen.Files {
if !f.Generate {
continue
}
opts := f.Desc.Options().(*descriptorpb.FileOptions)
workbook := proto.GetExtension(opts, tableaupb.E_Workbook).(*tableaupb.WorkbookOptions)
if workbook == nil {
continue
}
switch *mode {
case ModeMessager:
generateMessager(gen, f)
case ModeRegistry:
// pass
case ModeDefault:
generateMessager(gen, f)
}
}
switch *mode {
case ModeDefault:
generateRegistry(gen)
generateEmbed(gen)
case ModeMessager:
// pass
case ModeRegistry:
generateRegistry(gen)
}
return nil
})
}