Merge pull request #44 from gfanton/feature/concat

Concatenate if file already exist
This commit is contained in:
Manfred Touron 2017-01-17 17:17:27 +01:00 committed by GitHub
commit 99cff16e71
9 changed files with 43 additions and 2 deletions

13
examples/concat/Makefile Normal file
View File

@ -0,0 +1,13 @@
.PHONY: build
build:
mkdir -p output
protoc -I. --gotemplate_out=template_dir=templates,debug=true,all=true:output proto/*.proto
.PHONY: re
re: clean build
.PHONY: clean
clean:
rm -rf output

View File

@ -0,0 +1,3 @@
I'm Eric
I'm Francis
I'm Arnold

View File

@ -0,0 +1 @@
This is static text.This is static text.This is static text.

View File

@ -0,0 +1,2 @@
syntax = "proto3";
package Eric;

View File

@ -0,0 +1,2 @@
syntax = "proto3";
package Francis;

View File

@ -0,0 +1,2 @@
syntax = "proto3";
package Arnold;

View File

@ -0,0 +1 @@
I'm {{.File.Package}}

View File

@ -0,0 +1 @@
This is static text.

20
main.go
View File

@ -8,6 +8,7 @@ import (
"github.com/golang/protobuf/proto"
"github.com/golang/protobuf/protoc-gen-go/generator"
"github.com/golang/protobuf/protoc-gen-go/plugin"
)
func main() {
@ -71,17 +72,32 @@ func main() {
}
}
tmplMap := make(map[string]*plugin_go.CodeGeneratorResponse_File)
concatOrAppend := func(file *plugin_go.CodeGeneratorResponse_File) {
if val, ok := tmplMap[*file.Name]; ok {
*val.Content += *file.Content
} else {
tmplMap[*file.Name] = file
g.Response.File = append(g.Response.File, file)
}
}
// Generate the encoders
for _, file := range g.Request.GetProtoFile() {
if all {
encoder := NewGenericTemplateBasedEncoder(templateDir, file, debug, destinationDir)
g.Response.File = append(g.Response.File, encoder.Files()...)
for _, tmpl := range encoder.Files() {
concatOrAppend(tmpl)
}
continue
}
for _, service := range file.GetService() {
encoder := NewGenericServiceTemplateBasedEncoder(templateDir, service, file, debug, destinationDir)
g.Response.File = append(g.Response.File, encoder.Files()...)
for _, tmpl := range encoder.Files() {
concatOrAppend(tmpl)
}
}
}