Skip to content

Commit b64b4ea

Browse files
committed
Support json, text dump options
1 parent 9a8fff1 commit b64b4ea

File tree

2 files changed

+70
-16
lines changed

2 files changed

+70
-16
lines changed

README.md

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,15 @@ go install github.com/pubg/protoc-gen-debug
1515

1616
## Example
1717

18-
1918
### Dump protoc's input
2019
```sh
2120
protoc \
2221
--debug_out=./ \
23-
--debug_opt=dump_file=request.pb.bin \
24-
--debug_opt=parameter=expose_all=true \
22+
--debug_opt=dump_binary=true \
23+
--debug_opt=dump_json=true \
24+
--debug_opt=file_binary=request.pb.bin \
25+
--debug_opt=file_json=request.pb.json \
26+
--debug_opt=parameter=expose_all=true:foo=bar \
2527
-I ./ \
2628
./example.proto
2729
```
@@ -38,10 +40,16 @@ cat request.pb.bin | go run ./cmd/main.go
3840
1. Check `Redirect input from`
3941
2. Set dumped file path
4042
3. Run as Debug Mode
43+
4. Happy Debugging!
4144

4245
## Options
43-
| Option | Description | Default |
44-
|-----------|---------------------------------------|----------------|
45-
| dump_file | A file name to save protoc's input to | request.pb.bin |
46-
| parameter | Parameters for other plugins | "" |
46+
| Option | Description | Type | Default |
47+
|-------------|-------------------------------------|------------------------|-----------------|
48+
| dump_binary | Enable or not to dump binary format | bool | true |
49+
| file_binary | File name to save protoc's input | string | request.pb.bin |
50+
| dump_json | Enable or not to dump json format | bool | false |
51+
| file_json | File name to save protoc's input | string | request.pb.json |
52+
| dump_text | Enable or not to dump text format | bool | false |
53+
| file_text | File name to save protoc's input | string | request.pb.txt |
54+
| parameter | Parameters for other plugins | colon seperated string | "" |
4755

main.go

Lines changed: 55 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,76 @@ package main
22

33
import (
44
"flag"
5+
"strings"
56

67
"google.golang.org/protobuf/compiler/protogen"
8+
"google.golang.org/protobuf/encoding/protojson"
9+
"google.golang.org/protobuf/encoding/prototext"
710
"google.golang.org/protobuf/proto"
811
"google.golang.org/protobuf/types/pluginpb"
912
)
1013

14+
type PluginOptions struct {
15+
DumpBinary bool
16+
DumpJson bool
17+
DumpText bool
18+
FileBinary string
19+
FileJson string
20+
FileText string
21+
Parameter string
22+
}
23+
1124
func main() {
1225
var flags flag.FlagSet
1326
opts := protogen.Options{
1427
ParamFunc: flags.Set,
1528
}
1629

17-
dumpFile := flags.String("dump_file", "request.pb.bin", `dump file path`)
18-
parameter := flags.String("parameter", "", `parameter`)
30+
options := PluginOptions{}
31+
flags.BoolVar(&options.DumpBinary, "dump_binary", true, "Enable dump protobuf request as binary format")
32+
flags.BoolVar(&options.DumpJson, "dump_json", false, "Enable dump protobuf request as json format")
33+
flags.BoolVar(&options.DumpText, "dump_text", false, "Enable dump protobuf request as text format")
34+
flags.StringVar(&options.FileBinary, "file_binary", "request.pb.bin", "binary file path")
35+
flags.StringVar(&options.FileJson, "file_json", "request.pb.json", "json file path")
36+
flags.StringVar(&options.FileText, "file_text", "request.pb.txt", "text file path")
37+
flags.StringVar(&options.Parameter, "parameter", "", "parameter")
1938

2039
opts.Run(func(plugin *protogen.Plugin) error {
21-
plugin.Request.Parameter = parameter
22-
buf, err := proto.Marshal(plugin.Request)
23-
if err != nil {
24-
return err
40+
normalizedParam := strings.Replace(options.Parameter, ":", ",", -1)
41+
plugin.Request.Parameter = &normalizedParam
42+
43+
if options.DumpBinary {
44+
buf, err := proto.Marshal(plugin.Request)
45+
if err != nil {
46+
return err
47+
}
48+
_, err = plugin.NewGeneratedFile(options.FileBinary, "").Write(buf)
49+
if err != nil {
50+
return err
51+
}
52+
2553
}
26-
_, err = plugin.NewGeneratedFile(*dumpFile, "").Write(buf)
27-
if err != nil {
28-
return err
54+
55+
if options.DumpJson {
56+
buf, err := protojson.Marshal(plugin.Request)
57+
if err != nil {
58+
return err
59+
}
60+
_, err = plugin.NewGeneratedFile(options.FileJson, "").Write(buf)
61+
if err != nil {
62+
return err
63+
}
64+
}
65+
66+
if options.DumpText {
67+
buf, err := prototext.Marshal(plugin.Request)
68+
if err != nil {
69+
return err
70+
}
71+
_, err = plugin.NewGeneratedFile(options.FileText, "").Write(buf)
72+
if err != nil {
73+
return err
74+
}
2975
}
3076

3177
plugin.SupportedFeatures = uint64(pluginpb.CodeGeneratorResponse_FEATURE_PROTO3_OPTIONAL) | uint64(pluginpb.CodeGeneratorResponse_FEATURE_SUPPORTS_EDITIONS)

0 commit comments

Comments
 (0)